版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014110320/article/details/83037130
有符号右移>>
有符号右移就是右移之后,左边的补上符号位,正数补0,负数补1
无符号右移>>>
无符号右移就是右移之后,无论该数为正还是为负,右移之后左边都是补上0
左移<<
左移不区分有符号和无符号,都是左移之后右边补上0,最左边的符号位也直接移走
测试代码如下,直接看输出就能明白
System.out.println("java 右移");
Integer a = -5;
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(a >> 2));
System.out.println(Integer.toBinaryString(a >>> 2));
// java 右移
// 11111111111111111111111111111011
// 11111111111111111111111111111110
// 111111111111111111111111111110 注:前边的两个0被省略了
System.out.println("java 负数 左移");
Integer b = -(int)Math.pow(2, 31);
System.out.println(Integer.toBinaryString(b));
System.out.println(Integer.toBinaryString(b << 2));
// java 负数 左移
// 10000000000000000000000000000001
// 100 注:不保留符号位,符号位直接移走
System.out.println("java 正数 左移");
Integer c = 5;
System.out.println(Integer.toBinaryString(c));
System.out.println(Integer.toBinaryString(c << 2));
// java 正数 左移
// 101
// 10100