Python 整数的最大值和最小值

Python 整数的最大值和最小值,python,integer,Python,Integer,我正在寻找python中整数的最小值和最大值。例如,在Java中,我们有Integer.MIN\u值和Integer.MAX\u值。python中有类似的东西吗?python 3 在Python3中,这个问题不适用。普通int类型是无界的 但是,您实际上可能正在查找有关当前解释器的信息,在大多数情况下,这些信息与机器的字号相同。在Python3中,该信息仍然可用作sys.maxsize,它是由有符号字表示的最大值。等价地,它是最大可能的列表或内存的大小 通常,由无符号字表示的最大值为sys.ma

我正在寻找python中整数的最小值和最大值。例如,在Java中,我们有
Integer.MIN\u值
Integer.MAX\u值
。python中有类似的东西吗?

python 3 在Python3中,这个问题不适用。普通
int
类型是无界的

但是,您实际上可能正在查找有关当前解释器的信息,在大多数情况下,这些信息与机器的字号相同。在Python3中,该信息仍然可用作
sys.maxsize
,它是由有符号字表示的最大值。等价地,它是最大可能的列表或内存的大小

通常,由无符号字表示的最大值为
sys.maxsize*2+1
,字中的位数为
math.log2(sys.maxsize*2+2)
。有关更多信息,请参阅

Python 2 在Python 2中,普通
int
值的最大值可用作
sys.maxint

>>> sys.maxint
9223372036854775807
您可以使用
-sys.maxint-1
计算最小值,如图所示


一旦超过此值,Python将从普通整数无缝切换到长整数。因此,大多数情况下,您不需要知道它。

在Python中,一旦传递值,整数将自动从固定大小的
int
表示转换为可变宽度的表示,该值为231-1或263-1,具体取决于您的平台。注意这里附加的
L

>>> 9223372036854775807
9223372036854775807
>>> 9223372036854775808
9223372036854775808L
从:

数字由数字文字或内置函数和运算符创建。未加修饰的整数文本(包括二进制、十六进制和八进制数)生成纯整数,除非它们表示的值太大而不能表示为纯整数,在这种情况下,它们生成一个长整数。带有
'L'
'L'
后缀的整数文本产生长整数(
'L'
是首选,因为
1l
看起来太像11!)

Python非常努力地假装它的整数是数学整数并且是无界的。例如,它可以轻松地计算a:

>>> 10**100
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L

从Python 3.0开始,已删除了sys.maxint常量,改为使用sys.maxsize

整数

  • PEP237:本质上,long重命名为int。也就是说,只有一个内置的整型,名为int;但它的行为与 老长型
  • PEP 238:类似于1/2的表达式返回浮点。使用1//2获取截断行为。(后一种语法已存在多年,至少 至少在Python 2.2之后。)
  • sys.maxint常量已删除,因为整数的值不再有限制。但是,sys.maxsize可以用作 大于任何实际列表或字符串索引的整数。符合 实现的“自然”整数大小通常相同 与同一平台上早期版本中的sys.maxint相同(假设 相同的构建选项)
  • 长整数的repr()不再包含尾随的L,因此无条件删除该字符的代码将删除 改为最后一位。(请改用str()
  • 八进制文字不再是0720的形式;改用0o720

请参阅:

如果您只需要一个比所有其他数字都大的数字,您可以使用

float('inf')
以类似的方式,一个比所有其他数字都小的数字:

float('-inf')
这在Python2和Python3中都适用。

对于Python3,它是

import sys
max = sys.maxsize
min = -sys.maxsize - 1

我非常依赖这样的命令

python -c 'import sys; print(sys.maxsize)'
返回的最大整数:9223372036854775807

有关“sys”的更多参考信息,请访问


如果需要数组或列表索引的最大值(相当于C/C++中的
size\t
),可以使用numpy:

np.iinfo(np.intp).max
这与sys.maxsize相同,但优点是您不需要仅为此导入sys

如果希望计算机上的本机int为max:

np.iinfo(np.intc).max
您可以在中查看其他可用类型


对于浮动,您也可以使用sys.float\u info.max

您可以这样使用“inf”:

import math
bool_true = 0 < math.inf
bool_false = 0 < -math.inf
导入数学
bool_true=0

请参阅:

sys。maxsize
实际上不是支持的最大整数值。您可以将maxsize加倍并将其自身相乘,这样它就保持了一个有效且正确的值

但是,如果您尝试
sys.maxsize**sys.maxsize
,它将在相当长的时间内挂起您的机器。正如许多人指出的,字节和位大小似乎并不相关,因为它实际上并不存在。我猜python只是在需要更多的内存空间时很高兴地扩展了它的整数。所以一般来说没有限制

现在,如果你说的是以一种安全的方式包装或存储整数,它们以后可以完整地检索,那么这当然是相关的。我真的不确定如何打包,但我知道python的
pickle
模块可以很好地处理这些事情。字符串表示显然没有实际的限制


实际上,底线是:你的申请限制是多少?数字数据需要什么?使用该限制,而不是python完全不存在的整数限制。

这个数字可能看起来是任意的,但事实并非如此。9223372036854775807正好是
2^63-1
,因此您得到了一个64位int。一般来说,n位整数的值范围为
-2^(n-1)
2^(n-1)-1
。请注意,如果您使用的是32位Python运行时,sys.maxint将返回
2^31-1
,即使Python将使用
long
数据类型无缝地跳转到64位,也要使用
sys.maxsize
,正如@Akash Rana所建议的那样。比如说,它也出现在Python2中。这将使代码更兼容两个Python版本