发现两个小于X的最大功率?

use*_*100 14 python find

我这样做

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)

  • 当然,如果`n <= 0`则引发异常. (2认同)
  • 在Python3.2中:`int(math.log(4,2))== 1`,但是`int(math.log(8,2))== 3`.这是`power_two()`函数的不一致行为. (2认同)

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()


Ton*_*nen 6

两种方式,首先只适用于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)