有符号十进制转二进制

3

如何在Python中将带符号的十进制整数转换为16位二进制数? bin()函数很基本,只会在数字前添加“ - ”。

我的要求是: 假设我们有一个数字-4,那么输出应该是1000000000000100。 也就是说,MSB是符号位,其余位是幅度位。

我尝试了常见的掩码技巧,但它会给出2's补码和1's扩展的显着位。 例如,打印(bin(-7&0b1111111111111111).replace("0b",""))的结果是:1111111111111001。

1个回答

3
通过format添加前导零,然后根据正负添加符号位:
>>> def to_bin(val):
...     b = bin(val).split('b')[1][-15:]
...     p = '0' if val >= 0 else '1'
...     return p + format(b, '>015')
...
>>> to_bin(-7)
'1000000000000111'
>>> to_bin(-4)
'1000000000000100'
>>> to_bin(4)
'0000000000000100'
>>> to_bin(2 ** 16)    # overflow
'0000000000000000'
>>> to_bin(2 ** 16 - 1)
'0111111111111111'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接