1 = 0b1 -> 1
5 = 0b101 -> 3
10 = 0b1010 -> 4
100 = 0b1100100 -> 7
1000 = 0b1111101000 -> 10
…
如何获取整数的位长度,即在python中表示正整数所需的位数?
int.bit_length():返回用二进制表示整数所需的位数,不包括符号和前导零。docs.python.org/2/library/…
@其中一个是popcount(设置位的数目)。
在python 2.7+中,有一个int.bit_length()方法:
>>> a = 100
>>> a.bit_length()
7
>>> len(bin(1000))-2
10
>>> len(bin(100))-2
7
>>> len(bin(10))-2
4
号
注:对于负数无效,可能需要减去3而不是2。
但这不适用于负数(与日志版本相反,它也不会在负数上失败)
你说得对@killiands,我加了个便条
如果你关心的是负数,那就做len(bin(abs(n)))-2。
更重要的是,这对0来说是失败的。
另一种方法是做len("{:b}".format(x)),以避免不得不做减法。