问题概述
不使用运算符 +
和 -
,计算两整数之和
思考
不使用 +
和 -
,那就只能想到用位运算来处理了。思路如下:
- 两数进行
^
(异或运算),可以得到两个数在相同位上数值不同的相加结果 - 两数进行 &(与运算),可以得到哪些位该进位
- 如果与运算的结果为
0
,代表两数的所有位都是不同的数值,不需要进位,那么第一步得到的结果就是最终的结果 - 如果与运算的结果不为
0
,代表有位要进位,那么需要将这个结果往左移一位
- 如果与运算的结果为
- 重复上面两步,直到与运算结果为
0
,即得到的就是正确的结果
实现代码
public int getSum(int a, int b) {
while (b != 0) {
int t = a^b;
b = (a&b)<<1;
a = t;
}
return a;
}