我这样做
def power_two(n, base = -1):
result = 2 ** base
if result < n:
base += 1
power_two(n, base)
else:
if result == n:
print base
else:
print base - 1
Run Code Online (Sandbox Code Playgroud)
什么是pythonic方法找到小于X数的两个最大功率?
编辑示例:power_two(100)仅返回电源
Mar*_*ers 26
找到对数并截断它:
def power_two(n):
return int(math.log(n, 2))
Run Code Online (Sandbox Code Playgroud)
jfs*_*jfs 19
你可以使用bit_length():
def power_two(n):
return n.bit_length() - 1
Run Code Online (Sandbox Code Playgroud)
根据定义n != 0:2**(n.bit_length()-1) <= abs(n) < 2**n.bit_length()
两种方式,首先只适用于Python 2.7和3+:
import random
for number in (random.randint(0,1<<32) for _ in range(16)):
print "%20i,%4i, %4i" % (number, number.bit_length()-1, len(bin(number))-3)
Run Code Online (Sandbox Code Playgroud)