问题描述:
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
示例:
输入: a = 1, b = 1
输出: 2
提示:
a, b 均可能是负数或 0
结果不会溢出 32 位整数
解题思路:
使用为位运算求解,将a,b两个数进行二进制的相加时如下图所示:
观察发现,无进位和与异或运算规律相同,进位和与运算规律相同(并需左移一位)。所以我们可以利用这个规律进行求和。
解题思路参考文章:位运算解法
代码实现:
public int add(int a, int b) {
while(b != 0) {
// 当进位为 0 时跳出
int c = (a & b) << 1; // c = 进位
a ^= b; // a = 非进位和
b = c; // b = 进位
}
return a;
}
提交结果: