文章目录
- 题目链接:
- 题目描述:
- 解法
- 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;}
};