不使用+号的加法运算

80 阅读1分钟
public:
//递归
//进位值为(a&b)<<1,a&b表示需要进位的位置,<<1表示进位后的数
//a^b表示不考虑进位的加法,相同位为0,不同位为1
//结果=(a&b)<<1+a^b
//但是还有加法,如果a^b==0 则表示没有进位 +为a|b的值
//leetcode不支持有符号数的左移
    int add(int a, int b) {
        while(a&b){
        int c=(unsigned)(a&b)<<1;
        int d=a^b;
        a=c;
        b=d;
        }
        return a|b;

    }
};