# 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 进制