【C++算法】35.位运算_两整数之和
文章目录
- 题目链接:
- 题目描述:
- 解法
- C++ 算法代码:
题目链接:
371. 两整数之和
题目描述:
解法
笔试的话直接
return a+b;
接下来讲一下这题的解法:
位运算(异或运算-无进位相加)
例如:
13
和28
13+28=41
13
的二进制位a
:001101
28
的二进制位b
:011100
a^b
:010001因为异或运算是无进位相加,所以我们要找到进位相加的部分。
只有1
和1
异或是1
,如上图所示,刚好和&
的运算规则一样。
C++ 算法代码:
class Solution
{
public:
int getSum(int a, int b)
{
while(b != 0)
{
int x = a ^ b; // 先算出无进位相加的结果
unsigned int carry = (unsigned int)(a & b) << 1; // 算出进位
a = x;
b = carry;
}
return a;
}
};