• 加法可以分为不包含进位的加法(异或)和进位(与操作再左移)
  • 每次计算不包含进位的加法和进位,如果无进位,则不包含进位的加法计算出来的就是结果,如果有进位,则将不包含进位的加法算出来的而结果和进位算作两个数再相加
public class Solution {
    public int Add(int num1,int num2) {
        int sum = 0, carry = -1;
        // 如果进位为0则sum计算值是正确的
        while(carry != 0) {
            // 没有进位的加法
            sum = num1 ^ num2;
            // 单纯的进位
            carry = (num1 & num2) << 1;
            num1 = sum;
            num2 = carry;
        }
        return sum;
    }
}