右移
System.out.println(-3>>1);
結果是-2,為什么會是-2呢?下面我們來看一下.
System.out.println(Integer.toHexString(-3));
得到-3的16進制為fffffffd(此為-3的補碼,計算機中負數用補碼表示).
轉換成2進制為1111 1111 1111 1111 1111 1111 1111 1101
右移一位為1111 1111 1111 1111 1111 1111 1111 1110,顯而易見此為-2補碼.
左移
System.out.println(-3<<1);左移相對來說比較簡單.
1111 1111 1111 1111 1111 1111 1111 1101左移一位為
1111 1111 1111 1111 1111 1111 1111 1010,其為-6的補碼.
無符號右移
System.out.println(-3>>>1);
1111 1111 1111 1111 1111 1111 1111 1101無符號右移,高位補0,
01111 1111 1111 1111 1111 1111 1111 1110,其為2147483646的原碼.
