题目:
给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。
思路:
参考:https://leetcode-cn.com/problems/sum-of-two-integers/solution/wei-yun-suan-xiang-jie-yi-ji-zai-python-zhong-xu-y/
最后一行解释:
如-7 原码是 10000111 然后取反(最高位是符号位不用取反)得11111000。加1 得11111001 ,那么-7的二进制数就是 11111001。
解答:
class Solution:
def getSum(self, a: int, b: int) -> int:
# 2^32
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)