【问题标题】:Are python int's architecture specific?python int 的架构是特定的吗?
【发布时间】:2013-11-17 19:29:48
【问题描述】:

我们可以将变量定义为整数值,例如

x = 3
y = -2

然后使用二元运算符&|^~ 对位进行操作。问题是我们是否总是在每个架构上得到相同的结果,还是行为架构是特定的? 我们总是可以假设整数的补码表示吗?

【问题讨论】:

  • 任何编程语言的整数数据类型都必须依赖于架构,更准确地说是地址总线宽度。
  • @MarcellFülöp 编程语言的数据类型不必与架构提供的数据类型相匹配。
  • @MarcellFülöp:这不是真的。例如,在 Java 中,int 始终具有相同的大小和相同的行为,而与架构无关。由 Java 实现者来确保 JVM 行为正确,即使这不是体系结构最有效的大小。

标签: python binary integer cpu-architecture twos-complement


【解决方案1】:

Python 2.x 支持两种整数类型:intlongint 基于底层 C long 类型,long 是任意精度类型。非常早期的 Python 版本(2.2 之前),将这些类型视为两种独立的类型,但它们大多在 Python 2.2 中组合在一起。 Python 3.x 仅使用任意精度类型。

位运算的行为就像应用于任意精度 2 的补码一样。如果需要,int 将在 Python 2.x 中自动升级为 long

跨平台的行为是一致的。

【讨论】:

    【解决方案2】:

    来自 python 2 documentation(强调我的):

    纯整数:这些表示从 -2147483648 到 2147483647 范围内的数字。(在自然字长较大的机器上,该范围可能更大,但不会更小。)当运算的结果如果超出此范围,则结果通常返回为长整数(在某些情况下,会引发异常 OverflowError)。出于移位和掩码操作的目的,整数被假定为使用 32 位或更多位的二进制 2 的补码表示法,并且不对用户隐藏任何位(即,所有 4294967296 个不同的位模式对应于不同的值)。

    所以是的:整数是特定于 Python 2 的体系结构。

    来自 Python 3 documentation

    纯整数:这些表示无限范围内的数字,仅受可用(虚拟)内存的限制。出于移位和掩码操作的目的,假设使用二进制表示,负数表示为 2 的补码的变体,这给人一种向左延伸的无限符号位串的错觉。

    所以不:整数不是特定于 Python 3 的体系结构。

    【讨论】:

    • 唯一特定于架构的是返回的类型是int 还是long。无论哪种方式,该值都是相同的。甚至这种区别在 Python 3.x 中也不存在。
    猜你喜欢
    • 1970-01-01
    • 2010-10-15
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    相关资源
    最近更新 更多