int的最大值和最小值

如何在Python中表示整数的最小值和最大值?在Java中,我们有Integer.MIN_VALUEInteger.MAX_VALUE

1727888 次浏览

python3

在Python 3中,这个问题不适用。纯int类型未绑定。

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

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

python2

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

>>> sys.maxint9223372036854775807

您可以使用-sys.maxint - 1计算最小值,如这里所示。

一旦你超过这个值,Python就会无缝地从普通整数切换到长整数。所以大多数时候,你不需要知道它。

在Python中,一旦您传递值#2,整数将自动从固定大小的int表示切换到可变宽度的#1表示,根据您的平台,该值是231-1或263-1。请注意此处附加的L

>>> 92233720368547758079223372036854775807>>> 92233720368547758089223372036854775808L

python手册

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

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

>>> 10**10010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L

#0常量已从Python 3.0开始删除,而是使用#1

整数

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

参考:https://docs.python.org/3/whatsnew/3.0.html#integers

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

float('inf')

以类似的方式,比其他所有数都小的数:

float('-inf')

这适用于python 2和3。

对于Python 3,它是

import sysmax_size = sys.maxsizemin_size = -sys.maxsize - 1

我非常依赖这样的命令。

python -c 'import sys; print(sys.maxsize)'

返回的最大值:9223372036854775807

有关'sys'的更多参考,您应该访问

https://docs.python.org/3/library/sys.html

https://docs.python.org/3/library/sys.html#sys.maxsize

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

np.iinfo(np.intp).max

这与sys.maxsize相同,但优点是您不需要为此导入系统。

如果您希望在机器上使用max作为本地int:

np.iinfo(np.intc).max

您可以在doc中查看其他可用类型。

对于浮点数,您也可以使用sys.float_info.max

你可以这样使用'inf':

import mathbool_true = 0 < math.infbool_false = 0 < -math.inf

参考:数学-数学函数

sys.maxsize实际上不是支持的最大整数值。您可以将maxsize翻倍并将其自身相乘,它保持有效和正确的值。

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

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

所以实际上,底线是:你的应用程序限制是什么?它对数字数据需要什么?使用该限制而不是python相当不存在的整数限制。