题目描述
不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-of-two-integers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
主要思路
看清题目要求为不可以使用+和-,于是可以想到计算机组成原理学到的有关知识来解决,如下说明:
我们知道二进制数的加法有以下规则
a | b | result |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
相当于a和b异或
然后考虑进位,当且仅当两个操作数相同位上的值都是1时,才会发生进位c,即c= a & b,注意到进位项需要加到下一位上,进位结果需要向左移动一位。
代码实现
注意:C语言中int型最高位为符号位,如果使用int型直接运算,当出现负数的时候计算结果会发生溢出的情况
class Solution {
public:
int getSum(int a, int b) {
while(b){//当b为0
int c = (unsigned int)(a&b) << 1;//进位
a =a ^ b;//记录两数相加
b = c;//记录进位,进行下一位的相加
}
return a;
}
};