题目链接:https://leetcode-cn.com/problems/sum-of-two-integers/
题目描述
不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
思路
a ^ b 得到不进位加法
a & b 得到进位
int carry = a&b;
int sum = a^b;
sum ^= carry<< 1;
代码为:
class Solution {
public:
int getSum(int a, int b) {
return b == 0?a:getSum(a^b, (a&b) << 1);
}
};
得到和。
注意:LeetCode编译器不支持负数左移
代码
class Solution {
public:
int getSum(int a, int b) {
return b == 0?a:getSum(a^b, ((unsigned int) (a&b)) << 1); // 防止 AddressSanitizer 对有符号左移的溢出保护处理
}
};