注:负数的在Java中以补码表示(原码取反加一)
1.>> 是带符号右移,可以理解为除2。
(-1>>1 = 0)
-1的补码:11111111111111111111111111111111
减一后:11111111111111111111111111111110
取反后:1000000000000000000000000001((第一位是符号位,所以不用取反)
右移一位后:1000000000000000000000000000 也就是0。
2.>>>不带符号右移
-1的二进制:11111111111111111111111111111111,
>>>后:01111111111111111111111111111111
-2的二进制:11111111111111111111111111111110,
>>>后:01111111111111111111111111111111
Integer.MAX_VALU(2147483647)的二进制:01111111111111111111111111111111
所以:-1 >>> 1,-2 >>> 1 等于 Integer.MAX_VALUE。