35. 两整数之和
题目描述

题目示例

解题思路
这道题的核心在于模拟加法器的底层逻辑。我们不能直接用 + 号,得靠位运算。
- 异或
^:本质是【无进位加法】。比如1 ^ 1 = 0,1 ^ 0 = 1,它只计算当前位的和,不管进位。 - 按位与
&:能得到哪些位置产生了进位。但注意,进位是要加到下一位的,所以结果需要左移 1 位。
接下来就是循环处理:把'无进位和'赋值给 a,'进位值'赋值给 b,直到进位为 0 为止。这时候 a 就是最终结果。
代码实现
class Solution {
public:
int getSum(int a, int b) {
// 解法:位运算 (^异或:无进位相加)
while(b) {
int x = a ^ b;
int y = (a & b) << 1;
a = x;
b = y; // 得到进位的对应位置,再左移 1 才是需要进位的位置
// 只进行一次 a & b 不一定保证新的 a 和 b 没有需要进位的位置,所以需要将这个步骤进行循环
// a & b 为 0 则说明没有进位的位置了
}
return a ^ b;
}
};
流程图解









