如果0b0
代表1位「0」,爲什麼sys.getsizeof(0b0)
產量爲24?此外,sys.getsizeof
總是產生24,不管你給它的二進制值的大小有多長。Python - 位變量的大小始終爲24,而不是其大小
不應該sys.getsizeof(0b0)
產量1?
如果0b0
代表1位「0」,爲什麼sys.getsizeof(0b0)
產量爲24?此外,sys.getsizeof
總是產生24,不管你給它的二進制值的大小有多長。Python - 位變量的大小始終爲24,而不是其大小
不應該sys.getsizeof(0b0)
產量1?
Python無法在1位內存或甚至1個字節中存儲1位值。有像類型指針和引用計數的開銷,它的int
類型總是使用固定數量的字節來存儲它所代表的實際數量,根據您的Python版本,它可以是4或8個字節。 (也有long
類型,它不是固定大小,但即使是那種類型使用大於一個字節的塊)。
user2357112在描述什麼sys.getsizeof
爲您提供了很好的幫助。相反,如果你要問「我如何獲得一些顯著的位數,」你可以嘗試:
len(bin(some_num)) - 2 # strips 0b
或者,並感謝user2357112的評論:
max(some_num.bit_length(), 1) # minimum bound since (0).bit_length() == 0
或'some_num.bit_length()',儘管它有'0 .bit_length()== 0'的區別。 – user2357112
就像user2357112所說的那樣,這24個字節大多包含管理數據。它確實獲得大於24,你只是沒有嘗試過足夠多的尚未:
>>> sys.getsizeof(0b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111)
42
如果你要問「有多少位的號碼有」使用方法bit_length
:
>>> 0b0.bit_length()
0
>>> 0b1.bit_length()
1
>>> 0b1010101.bit_length()
7
0b0
不代表1位 0,但整數爲零。前綴0b
只是在base-2而不是base-10系統中編寫數字的一種方法。
要獲取表示整數所需的位數,請使用bit_length
方法。
謝謝,我現在明白了。但是,現在我有一個後續問題。一個二進制變量是否可以存儲在一個文件中,以創建一個具有1位內容的文件? – user3264316
@ user3264316否,因爲現在您正在處理文件管理,當然這不會將扇區分塊爲1位段。 –