考虑二进制:
-
异或运算,
1和0 为1,
0和1 为1,
1和1 为0,
0和0 为0 ,
可以看到和加法是一致的。除了进位; -
进位:
可以 令 二者 与 运算再左移1位。
因为二者只有在相同的位上同时为1的时候,才进位,进1位,左移1位。
得到的结果与异或得到的结果接着进行异或。
class Solution {
public:
int Add(int num1, int num2)
{
int sum = num1 ^ num2;
int carry;
while(num2!=0)
{
sum = num1 ^ num2;
carry = (num1 & num2)<<1;
num1 = sum;
num2 = carry;
}
return sum;
}
};