// 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
}
}