第十三天(位运算)
def getSum(self, a, b):
# 2^32
MASK = 0x100000000
# 整型最大值
MAX_INT = 0x7FFFFFFF # 第一位表示正负,所以整数最大值=2^31-1
MIN_INT = MAX_INT + 1 # 负数的补码是在反码的基础上+1,负数最小值=-2^31
#变成补码后,正负数可以直接相加,而后通过符号位判断正负
while b != 0:
# 计算进位
carry = (a & b) << 1
# 取余范围限制在 [0, 2^32-1] 范围内
a = (a ^ b) % MASK
b = carry % MASK
return a if a <= MAX_INT else ~(a^0xFFFFFFFF)
最后更新于