>> 算數右移和>>>邏輯右移

先說下原碼和補碼, 只說負數  以-2 爲列  int  32位

-2 的原碼爲   10000000  00000000 00000000 00000010

原碼轉換補碼   原碼 符號位不變  其餘全部取反  然後+1 

即 -2 的補碼爲 11111111 11111111 11111111 11111110

計算機中數字採用補碼錶示,原因    0的表示和運算等原因

>> 算數右移 考慮符號位  -2>>1  後計算機裏表示爲 11111111 11111111 11111111 11111111   轉成原碼爲 100000000000000000000。。。1 即 -1

>>> 邏輯右移 不考慮符號位 左邊都填0 所以 -2>>>1 後計算機裏的表示爲 01111111111111111111111111111111  轉原碼爲 01111111111111111111111111111111  因爲正數的原碼和補碼反碼都一樣,所以結果爲2147483647 


Ps 反碼: 原碼 符號位不變 其餘位取反。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章