原文题目:
解题:
不使用+-实现两个数的加法,想到的第一个方法就是用位运算,位运算中很常用的就是异或运算,而XOR其实就是不考虑进位的加法,比如说1+3,也就是01+11不考虑进位的话,结果就是10,而1^3=2,符合预期,所以说采用异或时没有考虑进位,那进位该怎么办,可以用相与&得到需要进位的Bit位。而所有的进位都是往前进了以为,可以认为是左移了一位,因此可以采用如下代码:
class Solution {
public:
int getSum(int a, int b)
{
int carbit = 0;
while(b)
{
carbit = a&b;
a = a^b;
b = carbit << 1;
}
return a;
}
};