簡體   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