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

上一篇下一篇

猜你喜欢

热点阅读