【问题标题】:Understanding how plain integers are represented in Python [duplicate]了解如何在 Python 中表示普通整数 [重复]
【发布时间】:2018-10-24 08:24:45
【问题描述】:

在阅读 Python 的内置数字类型,特别是 整数 时,我遇到了下面引用的这一行;

普通整数至少有 32 位长。范围至少为 -2,147,483,648 到 2,147,483,647(大约 ± 20 亿)。

这是否意味着我能想到的具有 20 亿位的任意数字是 Python 将其显示为 纯整数 的限制?如果我更具体地问,“32 位长” 参考上述引用的句子是什么意思。

【问题讨论】:

  • 你误会了。这不是 20 亿位数,而是最大值 20 亿。

标签: python computer-science


【解决方案1】:

位是可以存储 0 或 1 的少量计算机空间。

所以,如果我有 32 位,我可以表示范围从

00000...000(32 个零)

11111...111(32 个)

当写在binary时。

32 个 1 的数字是 4,294,967,295。这意味着,以最简单的方式,我们可以表示从 0 到 4,294,967,295 的所有数字。现在,在大多数情况下,我们也希望表示负数,因此我们将0 to 4,294,967,295 的范围从-2,147,483,648 to 2,147,483,647 移动一点。 (如何做到这一点本身就很有趣,请查看Two's Complement

因此,您提供的摘录实际上是说 Python 中的整数存储在 32 位中,这意味着 Python 中的整数可以小到 -2,147,483,648,大到 2,147,483,647。 (除此之外,它在内部被视为 bigint,以不同的方式存储)。

【讨论】:

  • 感谢您分享这些信息,这个概念现在对我来说更有意义了。
【解决方案2】:

不是20亿位数,而是20亿的实际值。

32位的引用表示python可以存储一个纯整数的位数。位以 2 为底表示(因为位可以是 0 或 1),而我们更常见的以 10 为底的数字以 10 为底表示。以 2 为底的数字 1 是 1,但以 2 为底的数字 2 是 10 - 就像以 10 为底一样,我们从 9 变为 10。

可以存储在 32 位中的最大值是您可以翻转 32 个 1 或 0 的组合数。这将使以下数字成为2^32 (=4 294 967 296)。但是你需要减去1才能得到最大值,因为0也是一个组合,使得最大的无符号数为4 294 967 295。

为了也表示负数,第一位通常保留用于对整数进行签名(1 表示负数,0 表示正数)所以它大致分成两半,最小的数为 -2 147 483 648和最大的 2 147 483 647。

【讨论】:

  • 这对我来说很有意义!感谢您分享这些信息。
猜你喜欢
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
相关资源
最近更新 更多