[英]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.