我有一个函数需要传递任意数量的位,例如7.是否有一种直接的方法来计算该位数可用的最大数量。例如,如果我传入8,则该函数将返回255.
有没有直接/有效的方法来做到这一点?
答案 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的指数,所以这可能是最简单和最容易理解的。