35. 两个整数之和
题目链接
题目描述
给定两个整数 a 和 b,不使用运算符 + 和 -,计算两数之和。
题目示例
输入:a = 1, b = 2 输出:3
解题思路
这道题的核心在于理解计算机底层加法是如何通过位运算实现的。我们不需要直接调用加法器,而是模拟硬件逻辑:
- 异或 (^):相当于无进位加法。比如 1^1=0, 0^1=1,这正好对应了二进制加法的本位结果。
- 按位与 (&) 并左移:只有当两个位都是 1 时才会产生进位。
a & b得到进位的位置,再<< 1左移一位,才是实际进位应该加到的位置。 - 循环处理:因为进位可能会引发新的进位(例如 11 + 01),所以我们需要不断重复'无进位和'与'进位'的计算,直到进位变为 0。
代码实现
class Solution {
public:
int getSum(int a, int b) {
// 解法:位运算 (^异或:无进位相加)
while (b) {
int x = a ^ b; // 无进位和
int y = (a & b) << 1; // 进位值
a = x;
b = y; // 将进位作为下一轮的加数
}
return a;
}
};
流程解析

36. 只出现一次的数字 II
题目链接
137. 只出现一次的数字 II - 力扣(LeetCode)




