2

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

x = 3
y = -2

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

4

2 回答 2

5

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

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

跨平台的行为是一致的。

于 2013-11-06T14:19:53.390 回答
4

从 python 2文档(强调我的):

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

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

从 Python 3文档

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

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

于 2013-11-06T14:08:19.007 回答