面对本题,一般思路直接return sum(num1, num2)就可以了,但是本题不知道能不能用这种哈哈
1、在计算机内部的操作都是由门电路实现,加法也一定由位运算实现;
2、不确定使用何种位运算情况,可以进行打表找规律(如下);
A(i) | B(i) | 求和 | 进位 |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
如上图所示,
(1) 当前位的和值等于 A(i)^B(i)
(2) 进位等于 A(i)&B(i),进位需要加在计算位的前一位,所以左移1位,即A(i)&B(i)<<1
所以找出规律 A+B=A^B+(A&B)<<1;
# -*- coding:utf-8-*-
classSolution:
def Add(self, num1, num2):
# write code here
whilenum2:
res = (num1 ^ num2) & 0xffffffff
index = ((num1 & num2) << 1) & 0xffffffff
num1 = res
num2 = index
ifnum1 <= 0x7fffffff:
res = num1
else:
res = -((num1 - 1) ^ 0xffffffff)
returnres