我正在尝试使用python代码解决问题,这需要我在不使用'+'或'-'运算符的情况下添加两个整数。我有以下代码,非常适合两个正数:
def getSum(self, a, b):
while (a & b):
x = a & b
y = a ^ b
a = x << 1
b = y
return a ^ b
如果输入是两个正整数或两个负整数,那么这段代码可以完美地工作,但是当一个数字为正数而另一个数字为负数时,此代码将失败。它进入无限循环。是否知道为什么会发生这种情况?
编辑:这是讨论此代码修补程序的链接。
Python 3具有任意精度的整数(“ bignums”)。这意味着任何时候x
都是负数,x << 1
将使x
负数具有两倍的幅度。零从右边移入只会将数字推得越来越大。
在二进制补码中,正数0
的最高位为,负数1
的最高位为。这意味着,当仅一个a
和b
为负时,顶部的位a
和b
将不同。因此,x
将为正(1 & 0 = 0
)和y
将为负(1 ^ 0 = 1
)。因此,新的a
将为正(x<<1
),新的b
将为负(y
)。
现在:1
至少在数学上,任意精度的负整数实际上具有无限数量的前导位。所以a
是一个越来越大的正数,由2每次迭代扩大。b
保持越说越导致1
加位,以便能够进行按位&
和^
使用a
。因此,任何位a
被开启线向上与所添加的一个1
位b
,所以a & b
始终是真实的,所以循环运行下去。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句