移位運算:>> >>

補充:int 爲32位,爲方便描述,以下以8位代替。計算機中以補碼的形式來運算,故先轉爲補碼來算。

  1. >>
    • 釋義:帶符號右移,即移位時空缺的位用符號位來補。(帶符號爲與後面的>>>對比)
    • 例:
      • 先看正數:
        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)
  2. <<
    • 釋義:左移,由於是左移,低位直接補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
  3. >>>
    • 釋義:右移,即移位時空缺的位用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章