【发布时间】:2011-01-09 18:33:12
【问题描述】:
我知道我可以使用右移执行除以 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有一个特殊情况,右移然后将其移动到负无穷大。
目前,我需要对此进行特殊的 if 检查,因为我期望 -1 / 2 = 0。
我想知道你们如何处理代码中的这个异常?你放了一个if检查?
【问题讨论】: