# Python 有一个和其他语言完全不一样的地方,就是对负数的二进制表示。Python 里的数是无所谓 Overflow 的,即没有位数限制,因此也就无所谓补码,因为补码都是相对于位数来说的,32 位补码和 16 位补码,肯定是不一样的。但是这样就导致了一个问题,就是无法直接得到 32 位二进制补码。

  • 原数值获取补码

    def intToBin32(i):
        return (bin(((1 << 32) - 1) & i)[2:]).zfill(32)
  • 补码转成原数值

    def bin32ToInt(s):
        return int(s[1:], 2) - int(s[0]) * (1 << 31)
  • 同理,求出二进制补码就可以根据二进制算出对应的 16 进制补码,8 进制补码

    int(value, 2)  # 将 2 进制转为 10 进制
    int(value, 8)	# 将 8 进制转为 10 进制
    int(value, 16)	# 将 16 进制转为 10 进制
    hex(value)	# 10 进制转 16 进制
    oct(value)	# 10 进制转 8 进制
    bin(value)	# 10 进制转 2 进制
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

渣渣文 微信支付

微信支付

渣渣文 支付宝

支付宝