二进制值的Python字符长度

二进制值的Python字符长度,python,math,binary,Python,Math,Binary,我正在寻找一种方法来确定二进制值占用的字符数 例如,如果我的值二进制值为4、20和60,我将得到以下结果: bin(4), 0b100 = 3 bin(20), 0b10100 = 5 bin(60), 0b111100 = 6 当2b-1时,正整数n有b位≤ N≤ 2b-1。因此,表示整数n所需的位数为: 由于前面有0b,所以需要在前面提到的公式中添加2 因此,这将是: floor(log n) + 3 在python中,您可以使用math模块,如下所示: math.floor(mat

我正在寻找一种方法来确定二进制值占用的字符数

例如,如果我的值二进制值为4、20和60,我将得到以下结果:

bin(4), 0b100 = 3

bin(20), 0b10100 = 5

bin(60), 0b111100 = 6
当2b-1时,正整数n有b位≤ N≤ 2b-1。因此,表示整数n所需的位数为:

由于前面有
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
作为一种更具Python风格的方法,您还可以使用它返回表示整数对象所需的位数。因此,要获得所需字符数,可以将其添加为2:

int.bit_length() + 2

此外,在最新版本中,
x.bit_length()
。如果需要更大输入的正确结果,则使用
floor(log(n,2))+1
不是一个好主意。例如,对于
562949953421311
,它在我的机器上给出了错误的结果(正确答案是
49
,但在我的机器上,该公式给出了
50
)。在最近的Python版本中,您可以使用
log2
,这比
log(n,2)
要精确一些,但是当
bit\u length
方法可用时,就没有意义了。@markdickinstonk供编辑。是的,那是因为计算浮点数时受到限制。但一开始我以为OP是在寻找一种数学方法,实际上我错过了
bit\u length
函数。
bit\u length
是一种方法,应该调用它
int.bit_length() + 2
a = 20
a.bit_length()
>> 5