如何在python2.5(严格)中将2的倒数升迁转换为某物

如何在python2.5(严格)中将2的倒数升迁转换为某物,python,mathematical-optimization,Python,Mathematical Optimization,我有一个数字是37。37位于2**5和2**6之间。我想写一个函数,它以数字为参数,并返回其下限的幂 def foo(x=37) { result =//Here calculation return result } 在上面的例子中,返回值应该是5,因为它的下限是2**5,而5是它的幂 注意:必须关注python 2.5 提前谢谢 import math def hi_bit(num): return int(math.log(num, 2)) 整数截断的base-2

我有一个数字是37。37位于
2**5和2**6之间。我想写一个函数,它以数字为参数,并返回其下限的幂

def foo(x=37)
{
 result =//Here calculation
 return result
}
在上面的例子中,返回值应该是
5
,因为它的下限是
2**5,而5
是它的幂

注意:必须关注python 2.5

提前谢谢

import math
def hi_bit(num):
        return int(math.log(num, 2))
整数截断的base-2 log函数将为您提供最高位集的索引。此索引
N
是数字的基数-2指数下限,因为它必须大于或等于
2**N


整数截断的base-2 log函数将为您提供最高位集的索引。此索引
N
是数字的以2为底的指数下限,因为它必须大于或等于
2**N

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

result = math.floor(math.log(x, 2))

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

result = math.floor(math.log(x, 2))
我只是遇到了同样的“问题”,并决定以不同的方式解决它

在查找base-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的一位

另外,我知道这个问题很老了,但由于它在谷歌搜索结果中的排名很高,我认为发布另一种方法也不错

PS2。我没有做性能测试,但在我做位操作的情况下,它似乎更合适,也不需要导入另一个库。

我只是遇到了同样的“问题”,决定用不同的方法解决它

在查找base-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的一位

另外,我知道这个问题很老了,但由于它在谷歌搜索结果中的排名很高,我认为发布另一种方法也不错

PS2。我没有做性能测试,但在我的情况下,因为我正在做位操作,它似乎更适合,也不需要导入另一个库