Python - 计算 2 的整数次方数的 log2(int) 的最快方法

Python - Fastest way to calculate log2(int) of a number that is an integral power of 2

我正在使用位集并希望快速迭代设置位,而不需要提前知道最大设置位。 Using this trick,好像不用扫描中间的0也能做到。但是链接技巧将设置位生成为位集,而不是整数(例如,第 0 个设置位生成为 0b1,而不是 0)。

当我知道 x 将是 2 的精确幂(例如在上述情况下)时,是否有计算 log2(x) 的快速位技巧?

我尝试了什么

最简单的版本,使用标准库并以bits(n)作为链接代码:

def bits(n):
    while n:
        b = n & (~n+1)
        yield b
        n ^= b

from math import log2
   
for b in bits(109):
    print(int(log2(b)))

0
2
3
5
6

尝试:

log2 = b.bit_length() - 1

- 1 因为 2ⁿ 需要 n+1 位。