小编典典

负逻辑移位

java

在Java中,为什么-32 >>> -1 = 1?
它不仅限于-32。只要它们不是太大,它就适用于所有负数。
我发现
x >>> -1 = 1
x >>> -2 = 3
x >>> -3 = 7
x >>> -4 = 15
给出0> x>一些大的负数

-1与<< 1一样吗?但是-32 << 1 = -64。
我已经阅读了二进制补码,但仍然不明白其原因。


阅读 223

收藏
2020-10-25

共1个答案

小编典典

这是因为当您移位32位时int,它仅占用移位距离的最后5位。(即mod 32),因此-1 mod 32 =
31,因此您向右移动了31位。当您移一个负数(其起始位全为1)时,您最终得到1。类似地,向右移-2即向右移30位,依此类推。如果向右移long,则需要6移位距离的位数。有关移位运算符如何工作的规范,请参见此处:http
:
//docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.19

2020-10-25