Python函数返回最大数目的64位

Leg*_*ooj -4 python math bit python-3.x

是否有将返回最大N位数的python 3函数?

例:

>>> print(largest_bitsize(8))
255
>>> print(largest_bitsize(16))
65535
Run Code Online (Sandbox Code Playgroud)

Kev*_*vin 9

我不认为它是内置的,但是编写自己的代码很容易。2 ^ N始终是需要N + 1位的最小数,因此(2 ^ N)-1必须是需要N位的最大数。

def largest_bitsize(n):
    return 2**n - 1

print(largest_bitsize(8))
#result: 255

print(largest_bitsize(16))
#result: 65535

print(largest_bitsize(64))
#result: 18446744073709551615
Run Code Online (Sandbox Code Playgroud)


ste*_*888 7

我也不认为有内置的func,但是您可以将其写出来。使用位移(而不是指数)以获得更快的性能:

def largest_bitsize(b):
     return (1 << b) - 1
Run Code Online (Sandbox Code Playgroud)


rda*_*das 6

这个怎么样?

def largest_bitsize(n):
    return int('1' * n, 2)
Run Code Online (Sandbox Code Playgroud)

例子:

>>> int('1'*16, 2)
65535
>>> int('1'*64, 2)
18446744073709551615
Run Code Online (Sandbox Code Playgroud)


blh*_*ing 6

@Kevin的答案由于使用了运算符,因此在时间复杂度上花费O(log n)

一种计算最大位数的更有效方法n是改用按位移位和反,这需要O(1)

def largest_bitsize(n):
    return ~(-1 << n)
Run Code Online (Sandbox Code Playgroud)

  • @jww Python语言故意使之成为可能。行为并非来自内部表示形式-实际上,CPython中的内部表示形式是符号幅度,因此CPython必须付出额外的努力来做“正确的事情”,并且表现得好像某种形式的无限二的补码被使用。 (2认同)

小智 6

这是一种效率较低的方法:

def largest_bitsize( n ):
   return sum( [ 2 ** i for i in range( n ) ] )
Run Code Online (Sandbox Code Playgroud)

  • 它的效率较低,但它很好地说明了 python 的一些功能。 (2认同)