将 python 整数转换为其带符号的二进制表示形式

convert python integer to its signed binary representation

给定一个正整数,例如 171 和一个 "register" 尺寸,例如8.

我想要由 171 的二进制表示形式表示的整数,即 '0b10101011' 解释为二进制补码。

在本例中,171 应变为 -85。 它是负数,因为给定 "register" 大小 8,MSB 为 1。

我希望我能解释我的问题。 我该如何进行这种转换?

我尝试了什么:

size = 8
value = 171

b = bin(value)

if b[len(b)-size] == '1':
    print "signed"
    # What to do next?

可能有一百种不同的方法可以做到这一点。这里有一对。

如果大小是 8 的倍数,那么像这样的东西就可以完成工作:

x = int.from_bytes(value.to_bytes(size // 8, byteorder='big'), byteorder='big', signed=True)

如果大小不是8的倍数,那么你可以这样做:

mask = 1 << (size - 1)
x = (value ^ mask) - mask

两者都假设该值不会太大而无法放入 "register"。

您不需要二进制转换来实现:

>>> size = 8
>>> value = 171
>>> unsigned = value % 2**size 
>>> signed = unsigned - 2**size if unsigned >= 2**(size-1) else unsigned
>>> signed
-85