从给定的位数计算可能的最大值

时间:2014-04-16 17:23:59

标签: python bits

我有一个函数需要传递任意数量的位,例如7.是否有一种直接的方法来计算该位数可用的最大数量。例如,如果我传入8,则该函数将返回255.

有没有直接/有效的方法来做到这一点?

2 个答案:

答案 0 :(得分:6)

将数字1左移位数,减1:

def max_bits(b):
    return (1 << b) - 1

演示:

>>> max_bits(8)
255
>>> max_bits(256)
115792089237316195423570985008687907853269984665640564039457584007913129639935L

Bitshifting比使用2的指数更快

>>> import timeit
>>> def max_bits_bitshift(b):
...     return (1 << b) - 1
... 
>>> def max_bits_exp(b):
...     return (2 ** b) - 1
... 
>>> timeit.timeit('f(256)', 'from __main__ import max_bits_exp as f')
2.767354965209961
>>> timeit.timeit('f(256)', 'from __main__ import max_bits_bitshift as f')
0.49823594093322754

对于256位数字,这个速度提高了5倍以上!

答案 1 :(得分:5)

你可以这样做(我说这非常简单有效):

def max_bits(b):
    return (2 ** b) - 1

演示:

>>> max_bits(8)
255

这是有效的,因为二进制位值始终是2的指数,所以这可能是最简单和最容易理解的。