我们可以将变量定义为整数值,例如
x = 3
y = -2
然后使用二元运算符 , 和 对&
位|
进行^
操作~
。问题是我们是否总是在每个架构上得到相同的结果,还是行为架构是特定的?我们总是可以假设整数的二进制补码表示吗?
我们可以将变量定义为整数值,例如
x = 3
y = -2
然后使用二元运算符 , 和 对&
位|
进行^
操作~
。问题是我们是否总是在每个架构上得到相同的结果,还是行为架构是特定的?我们总是可以假设整数的二进制补码表示吗?
Python 2.x 支持两种整数类型:int
和long
. int
基于底层 C long 类型并且long
是任意精度类型。非常早期的 Python 版本(2.2 之前),将这些类型视为两个独立的类型,但它们大多在 Python 2.2 中组合在一起。Python 3.x 仅使用任意精度类型。
位运算的行为就像应用于任意精度 2 的补数一样。如果需要,在 Python 2.x 中anint
将自动提升为 a 。long
跨平台的行为是一致的。
从 python 2文档(强调我的):
纯整数:这些表示从 -2147483648 到 2147483647 范围内的数字。(在自然字长较大的机器上,该范围可能更大,但不能更小。)当操作的结果超出此范围时,结果通常为作为长整数返回(在某些情况下,会引发异常 OverflowError)。出于移位和屏蔽操作的目的,假定整数具有二进制、2 的补码表示法,使用 32 位或更多位,并且不对用户隐藏任何位(即,所有 4294967296 个不同的位模式对应于不同的值)。
所以是的:整数是特定于 Python 2 的体系结构。
从 Python 3文档:
纯整数:这些表示无限范围内的数字,仅受可用(虚拟)内存的限制。出于移位和屏蔽操作的目的,假定二进制表示,负数表示为 2 的补码的变体,这给出了向左延伸的无限符号位串的错觉。
所以不:整数不是特定于 Python 3 的体系结构。