Python 整数概述
什么是 Python 整数?
在计数、标记或测量时,您通常会使用整数。在 Python 中,整数是用于表示整数的内置类型。一个整数可以存储像 0
、1
、-3
或 42
这样的值。这些值没有小数点,也没有虚部。
Python 整数是固定宽度的。它们适合在一个固定的范围内。这个范围取决于您的机器。在许多系统上,这个范围从 -2,147,483,648
到 2,147,483,647
。如果超出这个范围,Python 会引发错误。
Python 允许您使用整数存储整数。
x = 100
print(x)
# 100
Python 的普通整数在内存中是如何工作的?
Python 的普通整数使用二进制形式。这意味着 Python 使用比特(0 和 1)来存储数字。Python 使用二的补码形式来存储负数。这种形式使得机器能够轻松地进行正数和负数的数学运算。
每个数字都有一个比特模式。使用 32 位时,您可以获得 2³² 种模式。每一种模式都映射到一个单一的普通整数值。Python 以十进制显示数字,但机器使用的是二进制。
如果您使用的数字超出了该格式的范围,Python 会停止并告知您。该错误称为 OverflowError
。在较新的 Python 版本中,大数字会自动切换到长整数类型,但在本文中,我们专注于普通整数部分。
如果普通整数过大,Python 会引发错误。
x = 2_147_483_647
print(x + 1)
# OverflowError (在旧版本中)
何时应该使用 Python 普通整数?
当你知道数字是一个适合范围的整数时,可以使用Python的普通整数。它们适用于计数、索引、ID或任何不能有小数的情况。它们的速度快,占用的内存比浮点数或长整数少。
你还可以在数学运算、逻辑和索引中使用Python的普通整数。它们与所有数学运算符兼容。它们可以与for
循环、切片和范围生成一起使用。你大部分的数字代码将以普通整数开始。
Python允许你在数学运算和索引中使用普通整数。
values = [10, 20, 30, 40]
print(values[2])
# 30
Python 普通整数的历史时间线
Python 的普通整数规则源自何处?
Python 的普通整数源于早期使用 32 位寄存器和二进制补码数学的系统。它们最初被添加以支持快速的整数运算。后来,Python 添加了新的类型以处理更大的值,但为了向后兼容,保留了普通整数的规则。
人们在早期机器中定义了整数大小
1958 — 二进制数学规则 IBM 704 在硬件中使用固定长度的二进制表示有符号整数。
1972 — 二进制补码整数 C 语言将 int 定义为 32 位有符号值,并定义了 INT_MAX
和 INT_MIN
。
人们将普通整数构建到Python中
1991 — 普通整数和长整数 Python 0.9.0引入了这两种类型,其中int
作为固定大小的32位整数。
2000 — 溢出引发错误 Python 2在值超出普通整数范围时引发OverflowError
。
2010 — 与长整数合并 Python 3将所有整数在内部合并为一种类型,但在文档中保留了普通整数的逻辑。
Python普通整数的问题与解决方案
如何正确使用Python普通整数?
当你想要快速、简单的整数数学时,Python普通整数表现良好。但它们也有局限性。以下示例展示了如何正确使用它们,以及当你超出正常范围时会发生什么。
问题:如何在Python中精确计数?
你正在跟踪进入商店的人数。你从零开始,每当一个人进入时加一。你希望这个数字保持准确。你不需要小数或分数。
问题:你需要一种方法来跟踪一个从不带小数点的整数。
解决方案:使用Python的普通整数。它提供精确的值,并且在加法运算中表现良好。
Python允许你使用普通整数来跟踪计数。
count = 0
count += 1
count += 1
print(count)
# 2
问题:如何处理在Python中过大的数字?
您正在使用循环计算人口增长。数字不断增加。在某个时刻,您达到了限制,程序失败。您不知道为什么它停止了。
问题:您超过了Python普通整数的最大值。
解决方案:Python普通整数有一个固定的范围。如果结果超出该范围,Python会引发错误或根据版本切换到长整数。您应该关注增长并使用可以扩展的类型。
如果普通整数变得过大,Python会警告您。
n = 2_147_483_647
try:
print(n + 1)
except OverflowError:
print("太大了!")
# 太大了! (较旧的 Python 2 行为)
问题:如何在 Python 中在循环中使用整数?
您正在编写一个应该运行五次的 for 循环。您需要一个从 0 增加到 4 的数字。您希望循环索引是精确的。
问题:您需要一种安全且快速的方法来保存循环的索引。
解决方案: 在 range()
调用中使用 Python 的普通整数。循环使用整数,每个值都是安全的。
Python 允许使用普通整数进行循环,使用 range。
for i in range(5):
print(i)
# 0
# 1
# 2
# 3
# 4
问题:如何在Python中使用普通整数进行按位运算?
您正在编写代码以检查标志。您想使用二进制值设置和清除位。您听说Python可以使用按位运算符,但不确定普通整数是否有效。
问题:您需要一种支持位移和掩码的数字类型。
解决方案:Python的普通整数使用2的补码形式,并支持按位运算。您可以轻松地进行位移、掩码和翻转操作。
Python允许您在二进制运算中使用普通整数。
x = 0b1010
print(x << 1)
# 20
问题:如何从Python中的函数返回一个确切的数字?
你正在编写一个计算迷宫中步数的函数。你不想要浮点数。你希望这个数字是整数,以便程序的下一部分将其用作步数。
问题:你需要一个确切且完整的返回值。
解决方案:返回一个Python普通整数。它将保持值的完整性和可读性。
Python允许你从函数返回普通整数。
def steps(n):
return n * 2
print(steps(3))
# 6