我正在学习Python,我对数据类型的范围有疑问。
这个程序:
print("8 bits:", pow(2, 8)-1)
print("16 bits:", pow(2, 16)-1)
print("32 bits:", pow(2, 32)-1)
print("64 bits:", pow(2, 64)-1)
print( pow(18446744073709551615+18446744073709551615+2, 9) )
产生以下输出:
8 bits: 255
16 bits: 65535
32 bits: 4294967295
64 bits: 18446744073709551615
12663316555422952143897729076205936129798725073982046203600028471956337925454431
59912019973433564390346740077701202633417478988975650566195033836314121693019733
02667340133957632
我的问题是:Python如何计算最后一次调用pow()
的结果?我的CPU无法处理超过64位的整数,所以我希望操作产生溢出。
答案 0 :(得分:3)
Python长整数类型仅受可用内存的限制。直到你的内存不足,数字才会继续存在。
引用numeric types documentation:
长整数具有无限精度。
当您需要无限精度时,Python将透明地使用长整数。在Python 3中,所有整数都是长整数;没有区别。
答案 1 :(得分:2)
Python知道整数的两种数据类型:int
和long
。如果某个数字对于int
(64位)来说太大,则会自动使用long
。此外,如果计算结果对于int
来说太大,则会使用long
。
您可以明确声明文字为长文字;只需添加一个L
(l
也是可能的,但不鼓励,因为在许多字体中,这与1
(一个)字符无法区分或至少非常相似。因此,5L
是long
。
通常这种区别并不重要;但是,如果您比较值的类型(因为type(5)
≠type(5L)
),则必须知道差异。
long
不限于任何特定数量的位。然而,在荒谬的高值时,内存消耗和计算时间构成了实际限制。
另请注意,使用这些long
的计算内容可能比print
更快,因为在将它们转换为字符串进行打印时,必须将它们转换为十进制系统。 / p>