Java中的左移、右移詳細分析

1、<<(左移),>>(右移)皆屬于位運算符.其運算比乘除快,所以我們可以用其優(yōu)化代碼。

2、<<表示左移,不分正負數(shù),低位補0;

規(guī)則則是帶符號位移,高位移出,低位補0,移動位數(shù)超過該類型的最大位數(shù),則進行取模,如對Integer型左移34位,實際上只移動了兩位。左移一位相當(dāng)于乘以2的一次方,左移n位相當(dāng)于乘以2的n次方。

注:以下數(shù)據(jù)類型默認為byte-8位

左移時不管正負,低位補0

正數(shù):**r = 20 << 2**

  20的二進制補碼:0001 0100

  向左移動兩位后:0101 0000

    ?   結(jié)果:r = 80

負數(shù):**r = -20 << 2**

  -20 的二進制原碼 :1001 0100

  -20 的二進制反碼 :1110 1011

  -20 的二進制補碼 :1110 1100

  左移兩位后的補碼:1011 0000

        反碼:1010 1111

        原碼:1101 0000

        結(jié)果:r = -80

3、>>表示右移,如果該數(shù)為正,則高位補0,若為負數(shù),則高位補1;

注:以下數(shù)據(jù)類型默認為byte-8位

正數(shù):r = 20 >> 2

  20的二進制補碼:0001 0100

  向右移動兩位后:0000 0101

       結(jié)果:r = 5

負數(shù):r = -20 >> 2

  -20 的二進制原碼 :1001 0100

  -20 的二進制反碼 :1110 1011

  -20 的二進制補碼 :1110 1100

  右移兩位后的補碼:1111 1011

        反碼:1111 1010

        原碼:1000 0101

        結(jié)果:r = -5

4、>>>表示無符號右移,也叫邏輯右移,即若該數(shù)為正,則高位補0,而若該數(shù)為負數(shù),則右移后高位同樣補0

正數(shù): r = 20 >>> 2

    的結(jié)果與 r = 20 >> 2 相同;

負數(shù): r = -20 >>> 2

注:以下數(shù)據(jù)類型默認為int 32位

  -20:源碼:10000000 00000000 00000000 00010100

    反碼:11111111? 11111111? 11111111? 11101011

    補碼:11111111? 11111111? 11111111? 11101100

    右移:00111111? 11111111? 11111111? 11111011

    結(jié)果:r = 1073741819

————————————————

版權(quán)聲明:本文為CSDN博主「The best are water」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/kaixuansui/article/details/92806813

?著作權(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)容