题目:
不使用运算符 +
和 -
,计算两整数 a
、b
之和。
示例 1:
输入: a = 1, b = 2 输出: 3
示例 2:
输入: a = -2, b = 3 输出: 1
C代码:
int getSum(int a, int b) {
int sum = 0,carry = 0;
while(b)
{
sum = a ^ b;
carry = (a & b) << 1;
a = sum;
b = carry;
}
return a;
}
Python代码1:
class Solution:
def getSum(self, a, b):
MAX = 0x7FFFFFFF
MIN = 0x80000000
mask = 0xFFFFFFFF
while b != 0:
a, b = (a ^ b) & mask, ((a & b) << 1) & mask
return a if a <= MAX else ~(a ^ mask)
Python代码2:
class Solution(object):
def getSum(self, a, b):
l = [a,b]
return sum(l)
心得:此题考查的是位运算的知识,由于Python不是固定的32位,所以实现起来稍微繁琐,Python1的思路和C的思路是一样的,关于位运算实现相加的算法,先举一个十进制加法的例子,比如45+67=112,如果不考虑进位得到的结果是2,只考虑进位得到的结果是110,加起来正好是112,对于二进制其实也是这样的,因此我们可以将加操作和进位操作分开,二进制不进位加法其实就是异或操作,而进位操作实际上就是两个数对应位都为1时的左移,考虑到进位次数有限,当进位为0时,加出来的就是答案了。Python代码2只是满足题意的一个代码,不作为算法练习使用。