【发布时间】:2016-05-24 18:33:00
【问题描述】:
我正在寻找方法来确定我的二进制值占用的字符数。
例如,如果我的二进制值是 4、20 和 60,我会得到以下结果:
bin(4), 0b100 = 3
bin(20), 0b10100 = 5
bin(60), 0b111100 = 6
【问题讨论】:
-
另外,在最近的版本中,
x.bit_length()。
我正在寻找方法来确定我的二进制值占用的字符数。
例如,如果我的二进制值是 4、20 和 60,我会得到以下结果:
bin(4), 0b100 = 3
bin(20), 0b10100 = 5
bin(60), 0b111100 = 6
【问题讨论】:
x.bit_length()。
a = 20
a.bit_length()
>> 5
【讨论】:
当 2b-1 ≤ n ≤ 2b – 1 时,正整数 n 有 b 位. 所以表示一个整数n所需的位数是:
floor(log n)+1 # note that base of log is 2
由于前面有0b,因此需要在上述公式中添加 2。
原来如此:
floor(log n) + 3
在 python 中你可以使用math 模块,如下所示:
math.floor(math.log(n, 2)) + 3
例子:
>>> math.floor(math.log(10, 2)) + 3
6.0
>>>
>>> len(bin(10))
6
>>> math.floor(math.log(77, 2)) + 3
9.0
>>> len(bin(77))
9
作为一种更Pythonic 的方式,您还可以使用int.bit_length,它返回表示整数对象所需的位数。因此,要获取所需字符的数量,您可以添加 2 :
int.bit_length() + 2
【讨论】:
floor(log(n, 2)) + 1 不是一个好主意。例如,它在我的机器上给出了错误的结果562949953421311(正确答案是49,但在我的机器上这个公式给出了50)。在最近的Python版本中,你可以使用log2,它比log(n, 2)准确一点,但是当bit_length方法可用时真的没有意义。
bit_length 函数。
bit_length 是一个方法,应该被调用