不使用运算符
class Solution:
def getSum(self, a: int, b: int) -> int:
MASK = 0x100000000
# 整型最大值
MAX_INT = 0x7FFFFFFF
MIN_INT = 0x80000000
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%MIN_INT) ^ MAX_INT) #
# ~((a % MIN_INT) ^ MAX_INT) 为什么要对负数做这样的处理呢?
#因为在python中int不是32位的,输出是64位,所以一个负数比如-2, 64位表示就是0x00000000FFFFFFFE,
#用python求取这个16进制的值int('0x00000000FFFFFFFE', 16), 得到的数字是4294967294 不是我们想
#的-2,所以: a^mask是先对a的前32位取反,对应-2,就得到0x0000000000000002 再用~操作符对所以位置取
#反,对应-2,得到0xFFFFFFFFFFFFFFFE
#总结一下就是,由于oj系统python最后返回的是64位,如果不对负数特殊处理,那么负数的前32位是0,最后输出的是
#大于32位的正数