class Solution {
public:
int Add(int num1, int num2)
{
int sum, carry;
do
{
sum = num1^num2;
carry = (num1&num2)<<1;//求解出进位,然后左移一位,如进位为1,左移后为10
num1 = sum;//产生了两个数,如此计算
num2 = carry;
}
while(num2!=0);
return num1;
}
};
采用了《剑指offer》的结题思路。异或和且的用法很好理解,主要位移的用法<<1向左位移一次,表示进位。