如果0b0
表示1位“0”,为什么sys.getsizeof(0b0)
会产生24?此外,sys.getsizeof
总是产生24,无论你给它的二进制值的大小有多长。
sys.getsizeof(0b0)
不应该产生1?
答案 0 :(得分:2)
Python无法在1位内存中存储1位值,甚至不能存储1个字节。像类型指针和引用计数这样的开销,它的int
类型总是使用固定数量的字节来存储它所代表的实际数字,取决于你的Python构建4或8字节。 (还有long
类型,它不是固定大小的,但即使该类型也使用大于一个字节的块。)
答案 1 :(得分:1)
user2357112可以很好地描述sys.getsizeof
给你的内容。相反,如果您试图询问“我如何获得数字中的有效位数”,您可以尝试:
len(bin(some_num)) - 2 # strips 0b
或者,感谢user2357112的评论:
max(some_num.bit_length(), 1) # minimum bound since (0).bit_length() == 0
答案 2 :(得分:1)
与user2357112一样,这24个字节大多包含管理数据。它 大于24,你还没有尝试过足够大的数字:
>>> sys.getsizeof(0b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111)
42
如果您想询问“数字有多少位”,请使用bit_length
方法:
>>> 0b0.bit_length()
0
>>> 0b1.bit_length()
1
>>> 0b1010101.bit_length()
7
答案 3 :(得分:1)
0b0
不代表 1位 0,但整数为零。 0b
前缀只是在base-2而不是base-10系统中写入数字的一种方式。
要获得表示整数所需的位数,请使用bit_length
方法。