【问题标题】:convert python integer to its signed binary representation将python整数转换为其有符号二进制表示
【发布时间】:2015-11-30 16:49:49
【问题描述】:
给定一个正整数,例如 171 和一个“寄存器”大小,例如8.
我想要用 171 的二进制表示表示的整数,即 '0b10101011' 解释为二进制补码。
在本例中,171 应该变为 -85。
它是负数,因为给定“寄存器”大小 8,MSB 为 1。
我希望我设法解释了我的问题。
如何进行这种转换?
我尝试了什么:
size = 8
value = 171
b = bin(value)
if b[len(b)-size] == '1':
print "signed"
# What to do next?
【问题讨论】:
标签:
python
binary
integer
twos-complement
【解决方案1】:
你不需要二进制转换来实现:
>>> size = 8
>>> value = 171
>>> unsigned = value % 2**size
>>> signed = unsigned - 2**size if unsigned >= 2**(size-1) else unsigned
>>> signed
-85
【解决方案2】:
可能有一百种不同的方法可以做到这一点。这是一对。
如果大小是 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
两者都假设值不会太大而无法放入“寄存器”。