【问题标题】:finding the power of 2 of a number [duplicate]找到一个数字的2的幂[重复]
【发布时间】:2023-04-10 03:57:01
【问题描述】:

求一个数的 2 的幂的最优化方法是什么。例如:如果数字是 64,那么我想要 6 作为结果。

附: : 我已经阅读了很多关于如何检查数字是否可以表示为 2 的幂的帖子,但它们并没有给出实际的幂作为结果。

【问题讨论】:

标签: python python-3.x binary numbers


【解决方案1】:

两个logarithm of a number 是它必须是那个数字的力量:

>>> import math
>>> math.log2(64)
6.0

【讨论】:

    【解决方案2】:

    您只需要计算 以 2 为底的数字的对数。以下是这样做的两种方法

    方法一

    import numpy as np
    
    number = 64
    
    power = np.log2(64)
    # 6.0
    

    方法二

    import math
    
    math.log2(number)
    # 6.0
    

    【讨论】:

      【解决方案3】:

      这是一种黑客行为。将其转换为二进制数。如果输入是 2 的倍数,那么这不是问题

      >> bin(2).count('0') -1
      1
      >>> bin(64).count('0') -1
      6
      >>> bin(1024).count('0') -1
      10
      >>> bin(1024)
      '0b10000000000'
      

      【讨论】:

        【解决方案4】:

        这是一个选项(您正在寻找以 2 为底的 logarithm):

        from math import log2
        
        
        def integer_log2(n):
            if not bin(n).count("1") == 1:
                raise ValueError
            return int(log2(n))
        

        在二进制表示 (bin(n)) 中,一个数字只能是 o 2 的整数幂,它恰好包含一个 1。如果不是这种情况,此处介绍的函数将引发ValueError

        integer_log2(64))
        # 6
        

        因为无论如何您都需要二进制表示,所以您也可以只计算0s 的数量来获取日志:

        def integer_log2(n):
            b = bin(n)
            if not b.count("1") == 1:
                raise ValueError
            return b.count("0") - 1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-08
          • 2017-10-27
          • 1970-01-01
          • 2015-10-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-19
          相关资源
          最近更新 更多