思路
- 加法器原理
//进位 本位
1 + 0 = 01 进位 0 本位 1
1 + 1 = 10 进位 1 本位 0
0 + 0 = 00 进位 0 本位 0
0 + 1 = 01 进位 0 本位 1
只有 1 1 的情况会产生进位,即 & 操作可以获取进位
只有 1 0 的情况会产生本位为1 ,其他情况本位为1, 即通过 ^ 异或操作可以使得两数相加
以10进制为例
1 2
+ 1 8
-------
2 0 本位
0 1 进位
存在进位 != 0时,需要把进位 升一位 然后迭代循环加一遍
2 0
+ 1 0
-------
3 0 本位
0 0 进位
class Solution {
public int add(int a, int b) {
while(b != 0) {
// 产生进位
int carry = (a & b) << 1;
// 加法
a = a ^ b;
b = carry;
}
return a;
}
}
Q.E.D.