位运算题三例:加法、单次数字与缺失数
位运算在面试里出现得很频繁,原因不复杂:它能把一些看起来要开辅助数组、要做多轮遍历的题,压成几个按位操作。前提是你得先看懂它到底在模拟什么。
下面这三题很适合放在一起看。它们分别对应三种常见套路:异或做'消去',按位与配合移位做'进位',按二进制位统计做'还原'。
35. 两个整数之和
题目链接
题目描述
不使用运算符 + 和 -,计算两个整数 a 和 b 的和。

题目示例

核心思路
这题其实是在手动模拟二进制加法。
^负责算'本位加和但不进位'的结果。&负责找出哪些位会产生进位,再左移一位。- 把这两件事不断迭代,直到进位为 0,答案就稳定了。
说得直接一点:异或解决当前位,按位与处理麻烦的进位。
代码实现
class Solution {
public:
int getSum(int a, int b) {
// 当进位不为 0 时继续循环
while (b != 0) {
// 无进位和
int sumWithoutCarry = a ^ b;
// 进位值,需左移一位
int carry = (unsigned int)(a & b) << 1;
a = sumWithoutCarry;
b = carry;
}
a;
}
};









