Java位運(yùn)算

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

1、補(bǔ)碼的計算

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

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

2、按位與&

有0則0

3、按位或|

有1則1

4、按位取反~

~-8

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

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

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

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

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

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

7、左移<<

-8<<2

  • 先得到補(bǔ)碼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(計算機(jī)存儲的是補(bǔ)碼)

  • -8補(bǔ)碼:1111 1111 1111 1111 1111 1111 1111 1000
  • -5補(bǔ)碼: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ā)布平臺,僅提供信息存儲服務(wù)。

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

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