如何在python2.5中取2的某个值的反函数(严格)
我有一个数字,比如说 37
。这个数字在 2**5
和 2**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
。