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,这就还要进位了。