<p>根据@Hurkyl的出色解释,我使用python实现了无限二的恭维表示这一事实,逐步完成了<code>a=4</code>和<code>b=-4</code>的算法:</p>
<pre><code>Step 0:
a = ...(0)...000100
b = ...(1)...111100
carry = a & b = ...(0)...000100
a = a ^ b = ...(1)...111000
b = carry << 1 = ...(0)...001000
Step 1:
a = ...(1)...111000
b = ...(0)...001000
carry = a & b = ...(0)...001000
a = a ^ b = ...(1)...110000
b = carry << 1 = ...(0)...010000
Step 2:
a = ...(1)...110000
b = ...(0)...010000
carry = a & b = ...(0)...010000
a = a ^ b = ...(1)...100000
b = carry << 1 = ...(0)...100000
</code></pre>
<p>很明显,需要有一个有效的截断来模拟类似于32位有符号2的恭维整数。一旦进位气泡上升超过最高位,算法就需要停止。以下操作似乎有效:</p>
<pre><code>MAX_BIT = 2**32
MAX_BIT_COMPLIMENT = -2**32
def aplusb(a, b):
while b != 0:
if b == MAX_BIT:
return a ^ MAX_BIT_COMPLIMENT
carry = a & b
a = a ^ b
b = carry << 1
return a
</code></pre>
<p>结果:</p>
<pre><code>>>> aplusb(100,-100)
0
>>> aplusb(100,-99)
1
>>> aplusb(97,-99)
-2
>>> aplusb(1000,-500)
500
>>> aplusb(-1000,8000)
7000
</code></pre>