以二进制补码表示格式化负整数

Max*_*xim 6 python bit-manipulation

我想用二进制补码表示来表示一个负整数.使用标准的Python位表示实用程序并没有多大帮助:

>>> bin(-5)
'-0b101'
>>> format(-5, 'b')
'-101'
Run Code Online (Sandbox Code Playgroud)

-5二进制补码表示为1011.我该怎么做呢?

Ant*_*ony 14

Python的整数已经使用了两个补码,但由于它们具有任意精度,负数的二进制表示在开始时将具有无限的1s串,就像正数具有无限的0串一样.由于显然无法显示,因此用减号表示.

如果您想要特定宽度的二进制表示,您可以使用modulo.

>>> bin(-5)
'-0b101'
>>> bin(-5 % (1<<32))
'0b11111111111111111111111111111011'
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用所需长度的位掩码,例如`bin(-5&0xffffffff)`. (2认同)
  • @dcoles谢谢,我用这个做任何位转换.例如:```bin(-5&0b11111)```执行```0b11011``` (2认同)