两位单独的位相加其结果可以用异或得到, 进位可以用与得到.
例子:11+5
其二进制形式为11: 1011, 5: 0101
计算步骤:
1、与运算得出哪些位需要进位
11&5 --> 0001
2、异或运算得到两数二进制各位上分别相加的结果
11^5 --> 1110
3、将需要的进位加到第2步的结果
0001表示最后一位需要进位,左移1为0001<<1–》0010
此时运算结果为0010与1110的和,重复第一步
public int getSum(int a, int b) {
int carry = a & b;
int sum = a ^ b;
while(carry != 0){
carry = carry << 1;
return getSum(sum,carry);
}
return sum;
}