簡體   English   中英

將負值 integer 轉換為 python 中的 32 位二進制

[英]convert an negative integer to 32bit binary in python

我想創建一個 function,它提供以下內容

32_bit_binary(-1) should be '11111111111111111111111111111111'
32_bit_binary(1) should be  '00000000000000000000000000000001'

現在我給出了以下代碼

def 32_bit_binary(num_bits):
return '{:032b}'.format(num_bits)

但是當我給這個

print(32_bit_binary(-1))

它來了-00000000000000000000000000000001

代碼有什么問題?

正如@gspr 所說,以 2 為基數的格式並不能為您提供實際的表示形式。 您可以通過屏蔽負數 integer 來解決它,為了按位運算,它有無限多的前導 1,低至 32 位:

return f"{num_bits & 0xffff_ffff:032b}"

{:032b}之類的字符串格式不會為您提供數字的實際表示形式 它只是以 base-2 寫入數字。 那是一個純粹的數學運算。 實現細節,如計算機如何表示所述數字(如使用二進制、對負數使用 2 的補碼等)不在那些字符串格式化操作的 scope 中。

獲得 Python 中值的實際表示的一個好方法是struct模塊。 例如, struct.pack("@i", -1)返回字節b'\xff\xff\xff\xff' 以二進制形式打印該字節串留給讀者作為練習。

PS:除了-1之外的數字,你可能會對 struct.pack 的struct.pack感到驚訝。 您要查找的術語是字節序,以及我的struct.pack格式字符串中的@

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM