我有一个函数需要传递任意位数,例如 7。是否有一种直接的方法来计算该位数的最大可用数。例如,如果我传入 8,该函数将返回 255。
有没有直接/有效的方法来做到这一点?
请您参考如下方法:
将数字 1 左移位数,减一:
def max_bits(b):
return (1 << b) - 1
演示:
>>> max_bits(8)
255
>>> max_bits(256)
115792089237316195423570985008687907853269984665640564039457584007913129639935L
位移比使用 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 倍以上!
