在Java中,为什么-32>>> -1 = 1?
它不仅仅是-32。它适用于所有负数,只要它们不是太大
我发现了
x>>> -1 = 1
x>>> -2 = 3
x>>> -3 = 7
x>>> -4 = 15
给出0> x>一些大的负数
不是>>> -1与<<相同1?但是-32<< 1 = -64。
我已经阅读了两个补充,但仍然不理解推理。
答案 0 :(得分:6)
这是因为当您移动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
答案 1 :(得分:1)
Java根据左操作数的大小屏蔽右操作数。
对于32位int i
,
i << N --> i << (N mod 32)
对于64位long num
,
num << N --> num << (N mod 64)
此移位计数操作数的屏蔽也适用于>>
和>>>
。
int
(long
),则只使用右侧操作数的五(六)个最低位作为移位距离。“i
's