// System.out.println(5<<2); //運行結果是20 // 101 左移2位 10100 // System.out.println(5>>2); //運行結果是 1 // System.out.println(-5>>>2); // >> 和 << 算術移位,帶符號位的 右移 和左移,不夠補上 符號位(便是,正數右移,高位用0補,負數右移,高位用1補) // eg: 5 => 101 5>>2 5右移2位也就是 1 前面空的則由符號位 補齊,則是 001 // eg: -5 => 101 取反:010,而後 +1 -5>>2 =》 最終: 011 int i = -5; System.out.println(Integer.toBinaryString(i)); // 11111111111111111111111111111011 System.out.println(Integer.toBinaryString(i >> 2)); // 11111111111111111111111111111110 System.out.println(i >> 2); System.out.println("-----------------------"); // >>> 和 <<< 邏輯移位,無符號位的 右移和左移, 帶動符合移動,不夠補0 // 當負數使用無符號右移時,用0進行補位(天然而然的,就由負數變成了正數了) int k = 5; System.out.println(Integer.toBinaryString(k)); // 101 System.out.println(Integer.toBinaryString(k >>> 2)); // 1 System.out.println( k >>> 2); // 1 System.out.println("-----------------------"); int m = -5; System.out.println(Integer.toBinaryString(m)); // 11111111111111111111111111111011 System.out.println(Integer.toBinaryString(m >>> 2)); // 111111111111111111111111111110 System.out.println( m >>> 2); // 1073741822 } }