如何在python2.5中取2的某个值的反函数(严格)

0 投票
3 回答
2845 浏览
提问于 2025-04-16 14:01

我有一个数字,比如说 37。这个数字在 2**52**6 之间。我想写一个函数,输入这个数字后,能返回它的下限的指数。

def foo(x=37)
{
 result =//Here calculation
 return result
}

在上面的例子中,返回的结果应该是 5,因为它的下限是 2**5,而 5 就是这个下限的指数。

注意:要注意 Python 2.5 的相关问题。

谢谢大家的帮助。

3 个回答

0

我刚遇到同样的“问题”,决定用另一种方式来解决。

你在找的是以2为底的对数,根据定义,2的幂的二进制表示法中,每个数只会有一个1,其他的都是0:

>>> bin(64)
'0b1000000'
>>> bin(16)
'0b10000'

而且,这个1的位置(从右边开始数)就是你要找的幂加1(因为最右边的位是2的0次方)。

所以,你可以用下面的方法来解决这个问题:

>>> len(bin(64)) - 3
6
>>> len(bin(37)) - 3
5

这里的3是因为要减去前缀'0b'的长度和位置0的那一位。

附注:我知道这个问题很老了,但因为它在谷歌搜索结果中排名很高,我觉得再提供一种方法也不错。

附注2:我没有做性能测试,但在我的情况下,因为我本来就要进行位操作,所以这个方法似乎更合适,而且不需要导入其他库。

0

你可以使用以2为底的对数:

result = math.floor(math.log(x, 2))
6
import math
def hi_bit(num):
        return int(math.log(num, 2))

整数截断的二进制对数函数可以告诉你最高位的索引。这个索引 N 是这个数字的二进制指数的下限,因为它必须大于或等于 2**N

撰写回答