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 位。
我正在使用位集并希望快速迭代设置位,而不需要提前知道最大设置位。 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 位。