">>" 是带符号右移
">>>" 是无符号右移
我们对整数 4 进行操作
4转换为二进制是 0000 0000 ... 0000 0100 (整数类型有32位的长度,这里为了方便起见省略中间重复的0)
进行">>"操作后 0000 0000 ... 0000 0010 结果为2
进行">>>"操作后 0000 0000 ... 0000 0010 结果为2
两个操作结果一致
然后对-4进行操作
-4转换为二进制为 1111 1111 ... 1111 1100 (同样省略重复的1)
进行">>"操作后 1111 1111 ... 1111 1110 结果为-2
进行">>>"操作后 0111 1111 ... 1111 1110 结果为2147483646
可以看到">>"操作与一般的想法一致,等同于/2操作
System.out.println("4>>1: "+(4>>1)); System.out.println("-4>>>1: "+(-4>>1)); System.out.println("4>>>1: "+(4>>>1)); System.out.println("-4>>>1: "+(-4>>>1));