Java运算符>>与>>>区别详解

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。

你可能感兴趣的:(Java)