1. 程式人生 > >JAVA位移運算子瞭解`> >>>`

JAVA位移運算子瞭解`> >>>`

//如果你開始讀了,那麼一定要讀到末尾才有收穫
public static void main(String[] args) {
  // 關於位移運算的測試
  // 帶符號位移: << >>
  int a = 1;// int型別4位元組32位 00000000 00000000 00000000 00000001
  int b = -1;// 同樣是int 這個符號位怎麼表示啊?答案是用補碼錶示 11111111 11111111 11111111
        // 11111111
  // 但是我們怎麼判斷這個數表示的是 -1 而不是//通過以下兩個輸出可以得到結果
  System.out.println(Integer.MAX_VALUE);
  // 2147483647
// 01111111 11111111 11111111 11111111——也就是說第一位是符號位。 System.out.println(Integer.MIN_VALUE); // -2147483648 // -10000000 00000000 00000000 00000000 // 補 10000000 00000000 00000000 00000000 // 接下來我們對a和b進行位移運算 System.out.println(a); System.out.println(a >> 1); System.out.println(a << 1);//預測2 System.out.println(b); System.out.println(b >> 1
); System.out.println(b << 1);//預測11111111 11111111 11111110—— -2 //輸出 1 0 2 -1 -1 -2 //帶符號右移高位空出的地方補符號位,可以理解為符號位也右移,空位補符號位 //如果向右移動符號位補全高位空缺,如果向左移動,地位空缺通通由0補全 //還有一點缺陷,我們所做的測試中用的例子的二進位制數前31位都是相同的,無法判斷符號位到底是否跟隨移動了 //也就是說左移的測試是準確的,但是右移的測試是不一定準確的接下來我們用不同的資料進行測試 int c=1610612736;//01100000 00000000 00000000 00000000 System.out.println(c << 1
);//如果符號位不動得到的就是1073741824//否則是負數 //輸出是負數那就沒有任何疑問了 //==================================================================================== // 無符號位移: 注意這裡只有右移,沒有左移>>> //預測是右移符號位不動 System.out.println(c >>> 1);//注意現在是無符號移動了——預測為 805306368 //ok了,這裡是符號位不動,空位補0 }