为什么 x>>1 并不总是与 x/2 相同?

why x>>1 is not always same as x/2?

为什么 x>>1 并不总是与 x/2 相同?

尤其是负奇数时,例如:

    x = -3;
    Assert.assertNotEquals(x / 2, x >> 1);
    x =  3;
    Assert.assertEquals(x / 2, x >> 1);

感谢您的帮助。

因为 >> 的工作方式。 >> 不是 "divide by 2",它只是在某些情况下得到相同的答案。例如,对于 8 位值:

30b00000011; right-shift加一位就是0b00000001,也就是1.

-30b11111101; right-shift一位是0b11111110,或-2.

但是,Java 中的整数除法 / 被定义为始终向下舍入为零 - 因此 (-3) / 2 变为 -1(因为它更接近 0-2 是)。

编辑:评论指的是我在切换 >>>>> 时的脑残。