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

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)  # 计算机的运算均是补码运算
发布了169 篇原创文章 · 获赞 139 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_26460841/article/details/102835442