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) # 计算机的运算均是补码运算
给出两个整数 a 和 b , 求他们的和。
猜你喜欢
转载自blog.csdn.net/qq_26460841/article/details/102835442
今日推荐
周排行