给出两个整数 a 和 b , 求他们的和。

mac2024-04-10  28

class Solution(object): def summation(self, a, b): """ :type nums: List[int] :rtype: int """ # 对 a b 两个数字,做异或运算求不含进位的结果,做与运算在左移一位求进位的结果,最后将两者位用异或运算合在一起, # 因为此时不含进位,也即是对齐的位置没有两个相同的1存在。异或运算刚好就是不含进位的加法运算 # 故而需要处理的是,如何将进位彻底消除 plain_sum = a ^ b # 异或运算等价于不含进位的求和 # 判断上面求和的过程是否还存在进位,即用与运算一下,看是否值大于0 carry = (a & b) << 1 # 与运算后,需要右移一位才是真正的进位 while carry: # 当存在进位,就进入循环计算 temp = plain_sum plain_sum = plain_sum ^ carry carry = (temp & carry) << 1 # 此时的进位是,不含进位的和和进位做加法产生的 return plain_sum if __name__ == '__main__': print(Solution().summation(-5, 4)) # print(-5 & 4) # 计算机的运算均是补码运算
最新回复(0)