Java中的移位运算符:<<,>>,>>>

宋正兵 on 2020-12-17

java 有三种移位运算符:

符号 作用
<< 左移运算符,不分正负数,低位补 0
>> 右移运算符,该数为正,则高位补 0,若为负数,则高位补 1
>>> 无符号右移运算符,忽略符号位,空位都用 0 来补齐

<< 左移运算符

表示左移移,不分正负数,低位补 0,假设数据类型默认为 8 位。

正数:n = 20 << 2

20 的二进制补码:0001 0100

补码向左移动两位:0101 0000

结果:n = 80

负数:n = -20 << 2

-20 的二进制补码:1110 1100

补码向左移动两位:1011 0000

结果:n = -80

正数的原码、反码、补码相同,负数的补码为反码最低位 +1。

>>右移运算符

表示右移,如果该数为正,则高位补 0,若为负数,则高位补 1,假设数据类型默认为 8 位。

正数:n = 20 >> 2

20 的二进制补码:0001 0100

补码向右移动两位:0000 0101

结果:n = 5

负数:n = -20 >> 2

-20 的二进制补码:1110 1100

补码向右移动两位:1111 1011

结果:n = -5

>>>无符号右移运算符

表示无符号右移,也叫逻辑右移,即若该数为正,则高位补 0,而若该数为负数,则右移后高位同样补 0,假设数据类型默认为 8 位。

正数:n = 20 >>> 2

20 的二进制补码:0001 0100

补码向右移动两位:0000 0101

结果:n = 5,同 n >> 2 结果相同;

负数:n = -20 >>> 2

-20 的二进制补码:1110 1100

补码向右移动两位:0011 1011

结果:n = 59