大于或等于对数值的最小整数

0 投票
2 回答
2420 浏览
提问于 2025-04-18 05:58

我有一个整数,比如说是'51',我想把这个数字转换成二进制形式。在这个过程中,我需要计算 log(51),这样我会得到一个浮点数,结果是 3.93182563272。但是我希望得到一个整数格式的结果,比如 4,这样就可以用来表示51这个数字的二进制形式。

对数值的计算可以这样进行:

import math
math.log(51)

2 个回答

0

你可以在把它转换成整数之前,先使用一个向上取整的函数,这样可以确保结果是一个更大的整数:

math.ceil(math.log(51)) # round up

你还应该看看:

math.floor() # round down
math.round()

如果你需要把它保存为整数类型,可以把它转换成这种类型:

int()
2

如果你想知道二进制数字的数量,那就是用基数 2 来计算,而math.log 默认是计算自然对数(基数是 e)。你可以用第二个参数来指定其他的基数。然后你可以用math.ceil 来把这个数字向上取整。

math.ceil(math.log(51, 2))
6.0

你没有说明使用的 Python 版本,但如果你用的是 Python 3(感谢 @delnan),你可以用math.log2,这样会更准确:

math.ceil(math.log2(51))
6.0

numpy 也有一个 log2 方法(不过对于这个应用来说可能有点复杂)。

math.ceil 实际上返回的是一个浮点数,所以如果你想要一个整数,可以把这个表达式放在 int 里:

int(math.ceil(math.log(51, 2)))
6

顺便说一下,还有一个函数bin,你可能也想看看。它会返回一个字符串,里面是一个整数的二进制表示:

bin(51)
'0b110011'

...不过如果你不想去搞这些(再次感谢 @delnan),你可以直接用bit_length

(51).bit_length()    
6

撰写回答