Java位運算

??Java位運算在開發(fā)中用的很少,但是源碼中用的非常多,為了不影響我們閱讀源碼的進度,咱們一起來復習一下相關(guān)知識。

1、補碼的計算

整數(shù)的原碼、反碼和補碼相同
負數(shù)需要計算按照以下步驟計算,以-8為例

  • 二進制原碼1111 1111 1111 1111 1111 1111 1111 1000(Java int類型32位,所有高位用1填充)
  • 反碼(符號位除外,其余取反) 1111 1111 1111 1111 1111 1111 1111 0111
  • 補碼(反碼加一)1111 1111 1111 1111 1111 1111 1111 1000

2、按位與&

有0則0

3、按位或|

有1則1

4、按位取反~

~-8

  • 先得到補碼1111 1111 1111 1111 1111 1111 1111 1000
  • 再按位取反0000 0000 0000 0000 0000 0000 0000 0111,即7

結(jié)論:~X=-(X+1)

5、有符號右移>>,左側(cè)空位負數(shù)補1正數(shù)補0

-8>>2=1111 1111 1111 1111 1111 1111 1111 1000>>2=1111 1111 1111 1111 1111 1111 1111 1110=-2

6、無符號右移>>>,左側(cè)補0

-8>>2=1111 1111 1111 1111 1111 1111 1111 1000>>2=0011 1111 1111 1111 1111 1111 1111 1110=1073741822

7、左移<<

-8<<2

  • 先得到補碼1111 1111 1111 1111 1111 1111 1111 1000
  • 1111 1111 1111 1111 1111 1111 1111 1000<<2=1111 1111 1111 1111 1111 1111 1110 0000=-32

8、按位異或(同0異1)

-8^-5(計算機存儲的是補碼)

  • -8補碼:1111 1111 1111 1111 1111 1111 1111 1000
  • -5補碼:1111 1111 1111 1111 1111 1111 1111 1011
  • 0000 0000 0000 0000 0000 0000 0000 0011=3
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容