繁体   English   中英

为什么Python不会抛出溢出错误?

[英]Why isn't Python throwing an overflow error?

我正在学习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位的整数,所以我希望操作产生溢出。

Python长整数类型仅受可用内存的限制。 直到你的内存不足,数字才会继续。

引用数字类型文档

长整数具有无限精度。

当您需要无限精度时,Python将透明地使用长整数。 在Python 3中,所有整数都是长整数; 没有区别。

Python知道整数的两种数据类型: intlong 如果一个数字对于int (64位)来说太大,则自动使用long 此外,如果计算结果对于int来说太大,则使用long

你可以明确地声明一个文字是长的; 只需添加一个L (也可以使用l但不鼓励,因为在许多字体中,这是无法区分的,或者至少非常类似于1 (一个)字符)。 所以, 5Llong

通常这种区别并不重要; 但是,如果比较值的类型(因为type(5)type(5L) ),知道差异将是必要的。

long s不限于任何特定数量的比特。 然而,在荒谬的高值下,内存消耗和计算时间构成了实际限制。

还要记住,计算具有这些long东西可能比print它们更快,因为在将它们转换为字符串进行打印时,它们必须转换为十进制系统。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM