2013-04-27 81 views
4

我想用二進制補碼錶示表示一個負整數。使用標準的Python位代表事業不會有什麼幫助:以二進制補碼錶示格式負整數

>>> bin(-5) 
'-0b101' 
>>> format(-5, 'b') 
'-101' 

-5在補被表示爲1011。我該怎麼做呢?

+0

http://stackoverflow.com/questions/12946116/twos-complement-binary-in-python – Dmitry 2013-04-27 18:35:00

回答

11

Python的整數已經使用補,而是因爲他們有任意精度,負數的二進制表示將有1秒的無限串在一開始,就像正數有0的無限字符串。由於這顯然不能顯示,所以用一個負號表示。

如果你想要一個特定寬度的二進制表示,你可以使用模數。

>>> bin(-5) 
'-0b101' 
>>> bin(-5 % (1<<32)) 
'0b11111111111111111111111111111011' 
+0

很棒,謝謝! – Maxim 2013-04-27 18:34:56

+1

您也可以使用所需長度的位掩碼,例如'bin(-5&0xffffffff)'。 – dcoles 2015-08-28 03:53:18

+1

@dcoles謝謝,我用這個做任何位轉換。例如: '''箱(-5 0b11111)''' 執行 '''0b11011''' – 2017-03-15 15:55:37