为什么x>> 1并不总是与x / 2相同?
特别是当它是负奇数时,例如:
x = -3; Assert.assertNotEquals(x / 2,x>> 1); x = 3; Assert.assertEquals(x …
因为如何 >> 作品。 >> 不是“除以2”,它只是在某些情况下得到相同的答案。例如,在8位值上:
>>
3 是 0b00000011 ;右移一位是 0b00000001 ,是的 1 。
3
0b00000011
0b00000001
1
-3 是 0b11111101 ;右移一位是 0b11111110 , 要么 -2 。
-3
0b11111101
0b11111110
-2
但是,积分师 / 在Java中定义为始终向下舍入为零 - 所以 (-3) / 2 变 -1 (因为它更接近 0 比 -2 是)。
/
(-3) / 2
-1
0
编辑:评论指的是切换时的脑力 >> 和 >>> 周围。
>>>