题目描述
给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。
示例 1:
输入:a = 1, b = 2
输出:3
示例 2:
输入:a = 2, b = 3
输出:5
提示:
-1000 <= a, b <= 1000
解题思路
用位运算来解决加法问题。
循环32次位运算:如果第i位是两个1相加,则该位结果为第i-1位的进位,且该位应往第i+1位进位;如果第i位是两个0相加,则该位结果也为第i-1位的进位,且不用往第i+1位进位;如果第i位是一个1和一个0相加,且第i-1位进位为1,则该位结果为0,且往第i+1位进1;如果第i位是一个1和一个0相加,且第i-1位进位为0,则该位结果为1,且不用往第i+1位进位。
其实return (a+b)也可以过。
代码
class Solution {
public:
int getSum(int a, int b) {
int i,u1,u2,t=0,ans=0;
for(i=0;i<32;i++){//int32位
u1=(a>>i)&1;
u2=(b>>i)&1;
if(u1==1&&u2==1){
ans = ans|(t<<i);
t=1;
}
else if(u1==0&&u2==0){
ans = ans|(t<<i);
t=0;
}
else if(t==0){
ans = ans|(1<<i);
}
}
return ans;
}
};