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