關於二進制位移“>>”和“>>>”的區別小結

1.“>>”即帶符號位移
我們將-20右移四位結果爲-2

public static void main(String[] args) {
        int  x=-20;
        System.out.println(">>"+(x>>4));
        //10000000 00000000 00000000 00010100(原) 
        //11111111 11111111 11111111 11101011(反)
        //11111111 11111111 11111111 11101100(補) 
        //----帶符號右移4位---->後a的值
        //11111111 11111111 11111111 11111110(補碼)->
        //11111111 11111111 11111111 11111101(反碼)->
        //10000000 00000000 00000000 00000010(原碼)
    }

2.“>>>”右移時,空餘位都填充0
最後的結果是268435454

public static void main(String[] args) {
        int  x=-20;
        System.out.println(">>>"+(x>>>4));
        //10000000 00000000 00000000 00010100(原)
        //11111111 11111111 11111111 11101011(反)
        //11111111 11111111 11111111 11101100(補)
        //----不帶符號右移4位---->b的值
        //00001111 11111111 11111111 11111110(補碼)
        //00001111 11111111 11111111 11111110(反碼)
        //00001111 11111111 11111111 11111110(原碼)
    }

總結:可以看出來,兩個值是不同的,如果這裏把位移後的接受值強轉爲byte類型,結果相會相同。

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