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

时间:2016-01-21 04:51:11

标签: bit operation

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

特别是当它是负奇数时,例如:

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

由于>>的工作原理。 >>不是“除以2”,它在某些情况下最终会得到相同的答案。例如,在8位值上:

30b00000011;右移一位是0b00000001,即1

-30b11111101;右移一位是0b11111110,或-2

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

编辑:评论指的是我在转换>>>>>时的脑力。