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