题目
不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-of-two-integers
分析
1.两个数进行异或运算,相当于不进位相加;
2.两个数进行位与运算,然后右移一位,相当于进位
3.将上述两步结果相加;
4.重复1,2步,直到进位为0;
代码
class Solution {
public:
int getSum(int a, int b) {
while(b){
int sum=a^b;//不进位相加
int carry = unsigned(a&b) << 1;//进位(要使用无符号数,具体原因见备注)
a=sum;
b = carry;
}
return a;
}
};
备注:
1.拿8位二进制数举例
无符号数 0 ~ 255;
有符号数-128 ~ 127;
如果不是无符号数,负值就会处理错误
错误如下: