我知道我可以使用右移执行除以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进行修正。