Long Long Int 賦值中的溢位:為什麼整數文字相乘失敗
在提供的程式碼片段中,嘗試了三個long long 整數賦值:
long long int n = 2000*2000*2000*2000; // overflow long long int n = pow(2000,4); // works long long int n = 16000000000000; // works
雖然第三個賦值成功,但為什麼第一個賦值儘管使用了 long long int 還是會溢出?
理解整數型別
溢位的原因在於整數型態的本質。預設情況下,整數文字被指派可以表示其值的最小類型,但不小於 int。在給定的情況下,2000 是一個 int,在大多數系統上通常會佔用 32 位元。
乘法規則
算術運算子(例如乘法)通過所涉及的兩種類型中較大的一個,但不小於 int。例如:
但是,int * int 仍然呼叫operator*(int,int) -> int.
型別提升與溢位
在溢出賦值中,2000*2000*2000*2000 涉及到4 個int值相乘,得到一個比 int 更大的整數可以持有。儘管最終結果儲存在 long long int 變數中,但乘法是用整數進行的。
解決溢出
為了避免溢出,可以使用以下方法方法:
以上是為什麼在「long long int」賦值中乘以整數文字會導致溢位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!