题目描述
写一个函数,求两个整数之和,要求不得使用 +、-、*、/ 四则运算符号。
思路
1、两个数异或,表示没有考虑进位的情况下两数的和
2、两个数相与,并左移一位,表示进位
3、上述两步结果相加
计算 3 + 6
1、两数异或 0011 ^ 0110 = 0101
2、两数相与 0011 & 0110 = 0010
3、左移一位 0010 << 1 = 0100
即 0011 + 0110 = 0101 + 0100 (3 + 6 = 5 + 4)
如此循环下去,直到进位为0
循环
public int add(int a, int b) {
while(b != 0) {
int sum = a ^ b;
int carry = (a & b) << 1;
a = sum;
b = carry;
}
return a;
}
递归
public int add(int a, int b) {
return b == 0 ? a : add(a ^ b, (a & b) << 1);
}