为什么x>>1
并不总是与x/2
相同?
特别是当它是负奇数时,例如:
x = -3;
Assert.assertNotEquals(x / 2, x >> 1);
x = 3;
Assert.assertEquals(x / 2, x >> 1);
感谢您的帮助。
答案 0 :(得分:2)
由于>>
的工作原理。 >>
不是“除以2”,它在某些情况下最终会得到相同的答案。例如,在8位值上:
3
是0b00000011
;右移一位是0b00000001
,即1
。
-3
是0b11111101
;右移一位是0b11111110
,或-2
。
然而,Java中的整数除法/
被定义为始终向下舍入为零 - 因此(-3) / 2
变为-1
(因为它比0
更接近-2
是}。
编辑:评论指的是我在转换>>
和>>>
时的脑力。