A+B的问题
2018-08-21 本文已影响59人
myjourney
一.问题描述:给出两个整数a和b,求他们的和
二.问题说明
a和b都是 32位 整数么?
是的
我可以使用位运算符么?
当然可以
样例
如果 a=1 并且 b=2,返回3。
挑战
显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?(不使用++等算数运算符)
三.思路:
和sum其实就是x XOR y的结果。而进位carry恰好是x AND y的结果
1.通过对x和y进行&位运算,得出每一位上的进位。
2.对x和y进行^位运算,得出没有加进位的和。
3.将所得的和当做新的x,所得的进位往左移一位(第零位的进位输入为0)当做新的y,继续做上面的步骤,直到进位为0。
此时x中保存的就是x和y的和了。
但是要注意:若a+b正好为0,用位运算就陷入循环...
四.参考:
def aplusbt(a, b):
if a == 0:
return b
if b == 0:
return a
if a+b == 0:
return 0
while (b != 0):
_a= a ^ b
_b= (a & b)<< 1
a= _a
b= _b
return a