【问题标题】:Python character length of a binary value二进制值的 Python 字符长度
【发布时间】:2016-05-24 18:33:00
【问题描述】:

我正在寻找方法来确定我的二进制值占用的字符数。

例如,如果我的二进制值是 4、20 和 60,我会得到以下结果:

bin(4), 0b100 = 3

bin(20), 0b10100 = 5

bin(60), 0b111100 = 6

【问题讨论】:

  • 另外,在最近的版本中,x.bit_length()

标签: python math binary


【解决方案1】:
a = 20
a.bit_length()
>> 5

【讨论】:

    【解决方案2】:

    当 2b-1 ≤ n ≤ 2b – 1 时,正整数 nb 位. 所以表示一个整数n所需的位数是:

    floor(log n)+1 # note that base of log is 2
    

    由于前面有0b,因此需要在上述公式中添加 2。

    原来如此:

    floor(log n) + 3
    

    在 python 中你可以使用math 模块,如下所示:

    math.floor(math.log(n, 2)) + 3
    

    例子:

    >>> math.floor(math.log(10, 2)) + 3
    6.0
    >>> 
    >>> len(bin(10))
    6
    >>> math.floor(math.log(77, 2)) + 3
    9.0
    >>> len(bin(77))
    9
    

    作为一种更Pythonic 的方式,您还可以使用int.bit_length,它返回表示整数对象所需的位数。因此,要获取所需字符的数量,您可以添加 2 :

    int.bit_length() + 2
    

    【讨论】:

    • 如果您需要较大输入的正确结果,则使用 floor(log(n, 2)) + 1 不是一个好主意。例如,它在我的机器上给出了错误的结果562949953421311(正确答案是49,但在我的机器上这个公式给出了50)。在最近的Python版本中,你可以使用log2,它比log(n, 2)准确一点,但是当bit_length方法可用时真的没有意义。
    • @MarkDickinson感谢您的编辑。是的,这是因为计算浮点数的限制。但起初我以为 OP 正在寻找一种数学方法,实际上我错过了bit_length 函数。
    • bit_length 是一个方法,应该被调用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 2012-12-10
    相关资源
    最近更新 更多