为什么 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 位值:
3
是 0b00000011
; right-shift加一位就是0b00000001
,也就是1
.
-3
是 0b11111101
; right-shift一位是0b11111110
,或-2
.
但是,Java 中的整数除法 /
被定义为始终向下舍入为零 - 因此 (-3) / 2
变为 -1
(因为它更接近 0
比 -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 位值:
3
是 0b00000011
; right-shift加一位就是0b00000001
,也就是1
.
-3
是 0b11111101
; right-shift一位是0b11111110
,或-2
.
但是,Java 中的整数除法 /
被定义为始终向下舍入为零 - 因此 (-3) / 2
变为 -1
(因为它更接近 0
比 -2
是)。
编辑:评论指的是我在切换 >>
和 >>>
时的脑残。