python中的整形以补码形式存储。
正数存储是本身,负数的存储形式是原码的二进制表示加上个负号。
负数的补码: 负数&0xffffffff
负数补码转换为负数形式 : ~(a^0xFFFFFFFF)
print bin(-3)
//-0b11
print bin(-3 & 0xffffffff)
//0b11111111111111111111111111111101
# ^是当前数字的和, &是进位
def add(self, a: int, b: int) -> int:
# 将数字转为无符号整数
a &= 0xFFFFFFFF
b &= 0xFFFFFFFF
while b:
a, b = a^b, ((a&b)<<1)&0xFFFFFFFF
# 根据范围判定结果,映射为有符号整型
return a if a<0x80000000 else ~(a^0xFFFFFFFF)