通过异或运算可以得到两数的无进位加法结果,通过与后左移一位可以得到进位,结合这两个运算就可以得到加法结果。

class Solution {
public:
    int Add(int num1, int num2) {
        int result  = num1 ^ num2;
        int carry = (num1 & num2) << 1;
        while(carry){
            int temp1 = carry;
            int temp2 = result;
            result = result ^ carry;
            carry = (temp1 & temp2) << 1;
        }
        return result;
    }
};