题目描述
不使用运算符 +
和-
,计算两整数a
、b
之和。
示例:
若 a = 1 ,b = 2,返回 3。
思路
这里以a=3, b=2
为例子,通过位运算实现两数之和
可以通过异或
^
得到每一位上、没有加上进位的和:
0011
0010
结果为:0001 -> 没有加上进位的和可以通过
&
,再左移一位(第零位的进位输入为0),得到每一位上的进位
0011
0010
结果为:0010 ->每一位上的进位- 当没有进位的时候,
sum
即为结果,否则,上一次循环的sum
与carry
接着重复1、2
代码
int getSum(int a, int b) {
int sum = a;
int carry = b;
while(carry)
{
int tmp = sum;
sum = tmp ^ carry;
carry = (tmp & carry) << 1;
}
return sum;
}