两整数之和
题目链接:
题目描述:
给定两个整数 a 和 b,不使用运算符 + 和 -,计算两整数之和。
题目示例:
输入:a = 1, b = 2 输出:3
输入:a = 2, b = 3 输出:5
解法(位运算):
算法思路
在计算机底层,加法本质上是二进制位的运算。我们可以利用位运算符来模拟加法过程:
- 异或
^:相当于【无进位加法】。例如 1 ^ 1 = 0,0 ^ 1 = 1,这与加法中不考虑进位的结果一致。 - 按位与
&:能够定位到哪些位会产生进位。但进位需要左移一位才能加到高位上,所以是(a & b) << 1。
核心逻辑是循环执行上述两步,直到没有进位为止。当进位为 0 时,当前的 a 即为最终结果。
C++ 算法代码
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;
}
};
只出现一次的数字 II
题目链接:
137. 只出现一次的数字 II - 力扣(LeetCode)
题目描述:
给你一个整数数组 nums ,除某个元素仅出现一次外,其余每个元素都恰出现三次。请你找出并返回那个只出现了一次的元素。
题目示例:
输入:nums = [2,2,3,2] 输出:3
解法(比特位计数):


