這不是完全清楚你的問題是什麼,你想達到什麼,所以請糾正我,如果我做出錯誤的假設。
無論如何,將整數轉換爲二進制表示很容易使用bin
完成。例如,bin(5)
給你'0b101'
。現在,bin(-5)
爲您提供了'-0b101'
--這不是您在用其他語言的二進制文件時所期望的,例如, C.
「問題」是python中的整數是而不是固定大小。沒有int16
,int32
,uint8
等等。 Python會根據需要添加比特。這意味着負數不能其補充表示 - 0b11111011
不-5
作爲int8
,但251由於二進制文件可能是無限的,沒有固定的位置放置一個符號位。因此,python必須添加明確的一元-
。這是不同來自-5
的解釋字符串"-"
和"5"
。
如果你想得到負數的二進制表示,固定大小的整數,我認爲你必須自己做。某個功能,這可能看起來像這樣的:
def bin_int(number, size=8):
max_val = int('0b' + ('1'* (size - 1)), 2) # e.g. 0b01111111
assert -max_val <= number <= max_val, 'Number out of range'
if number >=0:
return bin(number)
sign = int('0b1' + ('0' * size), 2) # e.g. 0b10000000
return bin(number + sign)
現在,做你最初想:寫數字的二進制表示的文件。
output_list = [1, -1, -5, -64, 0] # iterable *containing* integers
with open(filename, 'w') as output_file: # with statement is safer for writing
for number in output_list:
output_file.write(bin_int(number) + '\n')
或者,如果你只是想檢查結果:
print([bin_int(number) for number in [1, -1, -5, -64, -127]])
# ['0b1', '0b11111111', '0b11111011', '0b11000000', '0b10000001']
注意,如果你想要去除的0b
,你能做到這一點通過bin_int(number)[2:]
,例如output_file.write(bin_int(number)[2:] + '\n')
。這將從保存二進制表示的字符串中移除前兩個字符。
預期結果是什麼?二進制的絕對值?一些預期的輸入/輸出將是有用的 – brianpck
是的,我需要在二進制的絕對值。如果輸入= -5,那麼輸出應該是= 11111011 – rrra
這不是'abs(-5)'的二進制數......「 – brianpck