先看前文参考链接中的《python解法详细解读 位运算具体过程 》 了解清楚python中负数的存储方式 以及位运算这题就简单了。
class Solution: def getSum(self, a: int, b: int) - int: # 取出a, b的补码 正数补码就是本身 负数补码取一波。 # 虽然python中负数是按补码存储的 但是其高位是无限个1 # 所以这里规定32位 第1位当成符号位 取余后就可以拿出补码来了。 # 虽然转成了负数的补码 但python中会认为其是个正数 所以在后续计算完后 # 若结果是负数 要将高于32位的全变成1 python才会认定其为负数哈哈。 a, b a 0xffffffff, b 0xffffffff # 原始a, b相加后 不断与进位相加 直到进位为0 while b! 0: carry ((a b) 1) 0xffffffff # 计算进位 a a^b b carry # 如果小于等于最大32为正数 则直接返回即可 # 如果大于了最大32位正数。说明肯定是负数 这时应该返回python负数的存储格式 # ~(a^0xffffffff) 这个意思就是将低32取了两次反 即低32位不变 低32位是正常的补码 # 由于python的负数前面是无限个1的 所以高于32的位全部取反 即高于32位的无限个0全部变为1就是python中的负数存储方式了 return a if a 0x7fffffff else ~(a^0xffffffff)



