在Java中,为什么-32 >>> -1 = 1? 它不仅限于-32。只要它们不是太大,它就适用于所有负数。 我发现 x >>> -1 = 1 x >>> -2 = 3 x >>> -3 = 7 x >>> -4 = 15 给出0> x>一些大的负数
-1与<< 1一样吗?但是-32 << 1 = -64。 我已经阅读了二进制补码,但仍然不明白其原因。
这是因为当您移位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
int
long