计算A和B的和,不用+号(两整数的和)
static int Add(int a, int b) {
    int c = 0;
    int d = 0;

    while (b != 0) {
        c = a ^ b;
        d = (a & b) << 1;

        a = c;
        b = d;
    }
    return a;
}

使用位运算符,使用^异或得到不算进位的和,使用&再左移一位得到进位的值,合并这两个组成有进位的和,继续判断有没有进位,没有就结束。

例如:2+3 就是 10+11

不算进位和为:01,进位为:100

异或合并:101,进位:000

退出,得到101,就是5

为什么要循环到进位没有,这里第一次进位就完事了,想想如果不算进位和为101时,最高位合并还是0,这就还要进位了。


首页 我的博客
粤ICP备17103704号