首页 论坛 置顶 Quark的概述:Python原生整数

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 作者
    帖子
  • #25247

    Python 整数概述

    什么是 Python 整数?

    在计数、标记或测量时,您通常会使用整数。在 Python 中,整数是用于表示整数的内置类型。一个整数可以存储像 01-342 这样的值。这些值没有小数点,也没有虚部。

    Python 整数是固定宽度的。它们适合在一个固定的范围内。这个范围取决于您的机器。在许多系统上,这个范围从 -2,147,483,6482,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_MAXINT_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
正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 哎呀,回复话题必需登录。