整数的最大值和最小值

2024-12-09 08:30:00
admin
原创
146
摘要:问题描述:如何在 Python 中表示整数的最小值和最大值?在 Java 中,我们有Integer.MIN_VALUE和Integer.MAX_VALUE。另请参阅:Python 中的最大浮点数是多少?。解决方案 1:Python 3在 Python 3 中,这个问题不再适用。普通int类型是无界的。但是,您...

问题描述:

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


另请参阅:Python 中的最大浮点数是多少?。


解决方案 1:

Python 3

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

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

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

Python 2

在 Python 2 中,普通值的最大值int如下sys.maxint

>>> sys.maxint  # on my system, 2**63-1
9223372036854775807

您可以按照文档中-sys.maxint - 1所示计算最小值。

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

解决方案 2:

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

float('inf')

类似地,一个比所有其他数字都小的数字:

float('-inf')

这在 Python 2 和 Python 3 中都有效。

解决方案 3:

sys.maxint从 Python 3.0 开始已删除常量,而是使用sys.maxsize

整数

  • PEP 237:本质上,long重命名为int。也就是说,只有一种内置整数类型,名为int;但它的行为与旧long类型大致相同。

...

  • 删除了常量sys.maxint,因为整数值不再有限制。但是,sys.maxsize可以用作大于任何实际列表或字符串索引的整数。它符合实现的“自然”整数大小,并且通常与sys.maxint同一平台上的先前版本相同(假设相同的构建选项)。

解决方案 4:

对于 Python 3,该类型没有最大值或最小值int

你可能会sys.maxsize对此感兴趣。根据文档:

系统最大大小

一个整数,给出类型变量可以取的最大值Py_ssize_t。它通常2**31 - 1用于 32 位平台和2**63 - 164 位平台。

import sys
max_size = sys.maxsize
min_size = -sys.maxsize - 1

解决方案 5:

在 Python 2 中,一旦您传递值,整数将自动从固定大小int表示转换为可变宽度表示,该值是 2 31 - 1 或 2 63 - 1,具体取决于您的平台。请注意此处附加的 :long`sys.maxint`L

>>> 9223372036854775807
9223372036854775807
>>> 9223372036854775808
9223372036854775808L

来自Python 2.7 手册:

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

Python 尽力将其整数视为数学整数,且无界。例如,它可以轻松计算googol :

>>> 10**100
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L

解决方案 6:

您可以像这样使用“inf”:

import math
bool_true = 0 < math.inf
bool_false = 0 < -math.inf

参考:数学——数学函数

解决方案 7:

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

np.iinfo(np.intp).max

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

如果您希望机器上的本机 int 为最大值:

np.iinfo(np.intc).max

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

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

解决方案 8:

在 64 位系统上的 CPython 3.11 中,最大和最小整数为

  2 ** ((2 ** 63 - 1) * 30) - 1
-(2 ** ( 2 ** 63      * 30) - 1)

您需要40 EB的内存来创建一个,按照今天(2023 年 7 月)NewEgg 上每 32GB 57 美元的价格计算,将花费700 亿美元,因此实际上 Python 的最大整数受到您计算机内存大小的限制。


CPython 3.11像这样存储整数(我通过删除所有宏来简化实际代码):

struct PyLongObject {
    Py_ssize_t ob_refcnt;  /* Metadata for garbage collection */
    PyTypeObject* ob_type; /* Metadata for type() */
    Py_ssize_t ob_size;    /* Number of items in ob_digit */
    uint32_t ob_digit[1];  /* Array of 32-bit integers */
};

因此,在 64 位系统上,Python 整数被实现为一个 32 位整数数组,用于存储整数的绝对值(但每个整数的 2 位未被使用),并且 64 位有符号二进制补码整数存储该数组的长度以及 Python 整数的符号,因此负整数具有负的“大小”。

解决方案 9:

sys.maxsize并非实际支持的最大整数值。您可以将 maxsize 翻倍,然后乘以自身,它仍然是有效且正确的值。

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

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

所以,真正的关键是:你的应用程序限制是什么?它对数字数据有什么要求?使用该限制,而不是 python 几乎不存在的整数限制。

解决方案 10:

我非常依赖这样的命令。

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

解决方案 11:

正如其他答案所指出的那样,与float(其最大值为sys.float_info.max) 不同,intPython 中的类型是无界的;它实际上受机器内存限制的限制。也就是说,有一些与整数相关的限制。

例如,自 Python 3.10.7 起,转换strint或打印int限制为 4300 位数字,其结果是默认情况下将非常长的整数写入文件受到限制(可以通过运行关闭此功能sys.set_int_max_str_digits(0))。您可以使用获取有关 Python 中整数内部表示的信息sys.int_info

而且由于float是有界的,您无法执行输出将成为浮点数界限之外的浮点数的计算(例如,2**1025/2引发OverflowError)。

此外,int在流行的数据分析库(如numpy和pandas等)中,它们的类型受到限制,例如numpy.uint64可以保存numpy中最大的正整数,可以通过检查np.iinfo('uint64')。这意味着我们不能执行涉及太大整数的矢量化计算,例如我们不能取2**64的log2(事实上,np.log2(2**64)会引发TypeError)。

sys.maxsize是最大可能列表的大小。您可以使用 来检查range()

len(range(sys.maxsize)) == sys.maxsize    # 9223372036854775807
len(range(sys.maxsize+1))                 # OverflowError

解决方案 12:

下面给出的代码将对您有所帮助。对于最大值,您可以使用sys.maxsize,对于最小值,您可以取反相同的值并使用它。

import sys 

ni=sys.maxsize
print(ni)
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用