python补码

  • python是不限制位数的,所以在获取补码的时候需要经过额外的位运算。

  • 以32位补码为例。x & 0xffffffff 和 ~(x ^ 0xffffffff) 能够将其转化为32位和还原补码。

https://leetcode.cn/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof/

# leetcode 剑指offer65
class Solution:
    def add(self, a: int, b: int) -> int:
        # 无变量位数的概念
        x = 0xffffffff  # 4294967295
        a, b = a & x, b & x # 从无限长度变为一个 32 位整数
        while b != 0:
            a, b = (a ^ b), (a & b) << 1 & x
        # ~(a ^ x) 是将 32 位以上的位取反,1 至 32 位不变。
        # 补码中 11111...1110 是 -2
        # 11111...1111 是 -1
        # 补码可以让正数和负数直接用加法运算
        return a if a <= 0x7fffffff else ~(a ^ x) 

最后更新于

这有帮助吗?