Java位運(yùn)算符

  • Java位運(yùn)算符:Java的位運(yùn)算符是把數(shù)字看作二進(jìn)制來進(jìn)行計(jì)算的。

    1. 按位與(&):如果存在兩個(gè)二進(jìn)制位都為1,則該位結(jié)果為1,否則為0
    2. 按位或(|):只要一個(gè)為1,則為1,否則為0
    3. 按位異或(^):兩個(gè)二進(jìn)制位相異為1,否則為0
    4. 取反(~):對數(shù)據(jù)的每個(gè)二進(jìn)制位取反,即把1變0,把0變1
    5. 左移動(dòng)(<<):運(yùn)算數(shù)的各二進(jìn)制位全部向左移動(dòng)若干位,即乘以2的若干次方
    6. 右移動(dòng)(>>):運(yùn)算數(shù)的各二進(jìn)制位全部向右移動(dòng)若干位,即整除以2的若干次方

    異或的數(shù)學(xué)規(guī)則
    運(yùn)算律:x^x=0, x^0=x
    交換律:x^y ^z =x^z ^y

  • 實(shí)際例子

    int a = 60; #60的二進(jìn)制為 0011 1100
    int b = 13; #13的二進(jìn)制為 0000 1101
    int c = 0;
    
    a&b: #結(jié)果為 0000 1100
    a|b: #結(jié)果為 0011 1101
    a^b: #結(jié)果為 0011 0001
     -a: #結(jié)果為 1100 0011
    a<<3: #結(jié)果為 1111 0000 0
    a>>3: #結(jié)果為 0000 0111
    
    System.out.println("二進(jìn)制輸出:":+Integer.toBinaryString(a&b));
    System.out.println("八進(jìn)制輸出:"+Integer.toOctalString(a));
    System.out.println("十六進(jìn)制輸出:"+Integer.toHexString(a));
    

負(fù)數(shù)的二進(jìn)制表示
負(fù)數(shù)的二進(jìn)制表示形式在計(jì)算機(jī)中,是以其正值的補(bǔ)碼形式表示的。

  • 原碼:一個(gè)整數(shù),按照絕對值大小轉(zhuǎn)換成的二進(jìn)制數(shù),稱為原碼。如:00000000 00000000 00000000 00000101 是 5的 原碼。
  • 反碼:將二進(jìn)制數(shù)(原碼)按位取反(1變0,0變1),得到的新二進(jìn)制數(shù)稱為原二進(jìn)制數(shù)的反碼。如:將00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。
  • 補(bǔ)碼:所得反碼加1。也就是說要得到一個(gè)數(shù)的補(bǔ)碼,先得到反碼再加1。

看看整數(shù)-1在計(jì)算機(jī)中如何表示。

  1. 先取1的原碼:00000000 00000000 00000000 00000001
  2. 得反碼:11111111 11111111 11111111 11111110
  3. 得補(bǔ)碼:11111111 11111111 11111111 11111111
    可見-1在計(jì)算機(jī)里面用二進(jìn)制表達(dá)就是全1,16進(jìn)制為:0xffffffff,根據(jù)-1的補(bǔ)碼計(jì)算出實(shí)際十進(jìn)制表示為:0xffffffff - 2**32
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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