题目: 不使用运算符 + 和 - ,计算两整数 a 、b 之和。
输入: a = 1, b = 2 输出: 3
public int getSum(int a, int b) {
if (a == 0) return b;
// if (b == 0) return a; 可以省略,因为a代表进位的话,一定先为0
// 与完之后此位是1 说明应该向高位进一位, 左移1位产生进位
int carry = (a & b) << 1;
int numWithNocarry = a ^ b; // 忽略进位之后的两数和 异或
return getSum(carry, numWithNocarry);
}
扩展:
不用临时变量 交换a b
a = a ^ b;
b = a ^ b;
a = a ^ b;