1,题目大意:
给定两个数,不用加法和减法求这两数的和
2,思路:
(1)因为不能用加法、减法,所以反应过来,用十进制去计算和可能性不是很大,这样想到了用二进制代替计算,就先想到用&,|,^等位运算也可以代替加法、减法。
(2)位运算:a + b
a&b : a、b都为1的为1–>标志着要进位的位置
a^b : a、b不同的为1–>代表着没有进位的相加和,这样再加上相应的进位,就是最后的值。
a + b 可以转换为 (a^b) + (a&b<<1),就可以循环求和
3代码:
(1)java
public class Solution {
public int getSum(int a, int b) {
while(b != 0) {
int tem = a & b;
a = a ^ b;
b = tem << 1;
}
return a;
}
}
(2)python
class Solution(object):
def getSum(self, a, b):
"""
:type a: int
:type b: int
:rtype: int
"""
while b != 0:
tem = a&b
a = a^b
b = tem<<1
return a
4,缺点:
这样计算并不是很快,希望有大神提出更高效的方法。