1、>>
带符号右移(相当于除以2)。正数右移高位补0,负数右移高位补1。比如:
4 >> 1
,4的原码为0000 0000 0000 0000 0000 0000 0000 0100
,右移一位后为0000 0000 0000 0000 0000 0000 0000 0010
,转成十进制为2。
-4 >> 1
,-4的原码为1000 0000 0000 0000 0000 0000 0000 0100
,补码为1111 1111 1111 1111 1111 1111 1111 1100
,右移一位后为1111 1111 1111 1111 1111 1111 1111 1110
,再转成原码为1000 0000 0000 0000 0000 0000 0000 0010
,转成十进制为-2。
2、>>>
无符号右移。无论是正数还是负数,高位通通补0。比如:
4 >>> 1
,4的原码为0000 0000 0000 0000 0000 0000 0000 0100
,右移一位后为0000 0000 0000 0000 0000 0000 0000 0010
,转成十进制为2。
-4 >>> 1
,-4的原码为1000 0000 0000 0000 0000 0000 0000 0100
,补码为1111 1111 1111 1111 1111 1111 1111 1100
,右移一位后为0111 1111 1111 1111 1111 1111 1111 1110
,由于右移后符号位为1,即变成正数,所以原码与补码一样为0111 1111 1111 1111 1111 1111 1111 1110
,转成十进制为2147483646。