# leetcode 剑指offer65
class Solution:
def add(self, a: int, b: int) -> int:
# 无变量位数的概念
x = 0xffffffff # 4294967295
a, b = a & x, b & x # 从无限长度变为一个 32 位整数
while b != 0:
a, b = (a ^ b), (a & b) << 1 & x
# ~(a ^ x) 是将 32 位以上的位取反,1 至 32 位不变。
# 补码中 11111...1110 是 -2
# 11111...1111 是 -1
# 补码可以让正数和负数直接用加法运算
return a if a <= 0x7fffffff else ~(a ^ x)