牛客网_另类加法

//另类加法,不能使用算数运算符
int addAB(int A, int B) {
    // write code here
    int xor, and;
    while (B != 0)
    {
        xor = (int)(A ^ B); //异或运算结果与两数加的结果相同,不包含进位
        //  1010
        //+ 1101
        //=10111 异或结果为0111,不包含进位
        and = (int)((A & B) << 1); //与运算结果和两数相加进位相同(进位结果0/1),
        //与运算结果为1000,第四位相加产生进位,左移一位为10000,与异或结果相加:
        //  0111
        //+10000
        //=10111
        A = xor;
        B = and; //将与运算结果左移一位给B(因为是进位,要与前一位相加),再进行异或(相当于加法),直至没有进位了。
    }
    return A;
}

猜你喜欢

转载自www.cnblogs.com/dabai56/p/10955412.html