補充:int 爲32位,爲方便描述,以下以8位代替。計算機中以補碼的形式來運算,故先轉爲補碼來算。
- >>
- 釋義:帶符號右移,即移位時空缺的位用符號位來補。(帶符號爲與後面的>>>對比)
- 例:
- 先看正數:
int rightTwo=4;
System.out.println(rightTwo>>2);//result:1
過程:
4的補碼:其符號位爲0——–0000 0100
第:一步:向右移兩位————–00 0001
第二步:以符號位來補高位—0000 0001
於是結果爲1 - 再看負數:
int rightTwo=-4;
System.out.println(rightTwo>>2);//result:-1
過程:
-4的補碼:其符號位爲1 ——1111 1100
第一步:向右移兩位—————11 1111
第二步:以符號位來補高位—1111 1111
於是結果爲-1
- 先看正數:
- 常見應用:求2的N次方?//2>>(n-1)
- <<
- 釋義:左移,由於是左移,低位直接補0,故不存在帶不帶符號的問題。
- 例:
- 先看正數:
int leftTwo=7;
System.out.println(leftTwo<<1);//result:14
過程:
7的補碼:其符號位爲0——0000 0111
第一步:向坐移一位———0000 111
第二步:以0來補低位——–0000 1110
於是結果爲14 - 再看負數:
int leftTwo=-7;
System.out.println(leftTwo<<1);//result:-14
過程:
-7的補碼:其符號位爲0—–1111 1001
第一步:向坐移一位———1111 001
第二步:以0來補低位——–1111 0010
於是結果爲-14
- 先看正數:
- >>>
- 釋義:右移,即移位時空缺的位用0來補
- 例:
- 先看正數:
int rightThree=4;
System.out.println(rightThree>>>2);//result:1
過程:
4的補碼:———————0000 0100
第一步:向右移兩位————00 0001
第二步:以0來補高位——-0000 0001
於是結果爲1 - 再看負數:
int rightThree=-4;
System.out.println(rightThree>>>2);//result:1073741823
注意:1073741823此結果已超過8位,故以8位代替演示是不行的,此處轉爲32位。(以省略號代替)
過程:
-4的補碼:——————–…1111 1100
第一步:向右移兩位————…11 1111
第二步:以0來補高位——-00…11 1111
於是結果爲1073741823
- 先看正數:
提示:byte、short和char類型的表達式移位後的表達式類型爲int 類型。
byte rightThree=-4;
System.out.println(rightThree>>>2);//result:1073741823