我知道我可以使用右移执行除以2的操作。

为简单起见,采用4位数字系统

-1 - 1111
-2 - 1110
-3 - 1101
-4 - 1100
-5 - 1011
-6 - 1010
-7 - 1001
-8 - 1000
7  - 0111
6  - 0110
5  - 0101
4  - 0100
3  - 0011
2  - 0010
1  - 0001
0  - 0000

如果我尝试表演
6 / 2 = 0110 >> 1 = 0011 = 3
-6/ 2 = 1010 >> 1 = 1101 = -3

对+ ve和-ve数均有效

但是,当到1
1 / 2 = 0001 >> 1 = 0000 = 0
-1/ 2 = 1111 >> 1 = 1111 = -1

似乎在-1中有一个特殊情况,先右移然后将其移至负无穷大。

目前,我需要对此进行特殊的检查,因为我期望-1/2 = 0。

我想知道您如何处理代码中的此异常?你们放支票吗?

最佳答案

任何负的奇数将不起作用。但是要回答您的问题,如果您知道可以有负数,请除以2。这将由jit/compiler进行修正。

关于java - 右移可进行2-1除以2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2143840/

10-10 01:55