0
A
回答
1
霍爾特的answer是正確的,我只是離開這裏作爲注意!
你可以嘗試使用:
long long int
,而不是
long int
然而,在我的本地機器,它沒有任何效果:
#include <stdio.h>
int main(void)
{
long int k=(long int)(2000*2000*2000);
printf("With long int, I am getting: %ld\n", k);
long long int n = 2000*2000*2000;
printf("With long long int, I am getting: %lld\n", n);
return 0;
}
輸出:
With long int, I am getting: -589934592
With long long int, I am getting: -589934592
警告:
../main.c:6:36: warning: integer overflow in expression [-Woverflow]
long int k=(long int)(2000*2000*2000);
^
../main.c:9:32: warning: integer overflow in expression [-Woverflow]
long long int n = 2000*2000*2000;
即使是這樣:
unsigned long long int n = 2000*2000*2000;
printf("With long long int, I am getting: %llu\n", n);
會溢出了。
1
有在你的代碼的兩個問題:
long int
是(在大多數架構)沒有足夠的存儲8e9
。- 當你這樣做
2000 * 2000 * 2000
,操作使用由「簡單」int
,因此,int * int * int = int
所以你把結果給int
,然後到long int
。
您需要使用long long int
,並指定要long long int
:
long long int k = 2000LL*2000LL*2000LL;
通知2000
後的額外LL
說: 「這是2000年,但作爲一個long long int
!」。
2
2000
是int
類型,所以2000*2000*2000
也是int
類型。
假設32位int
(這是比標準需要實際上更大,因爲一個int
不需要由標準來表示的值超過32767
)的最大可表示值約爲2,147,483,647
(插入可讀性逗號)這小於8,000,000,000
。
你可能會想要做的測算爲2000LL*2000*2000
其利用乘法被左右關聯,做乘法之前,將促進所有2000
值long long int
。如果您希望保證能夠存儲結果,您的變量也需要是long long int
類型。
3
如果C整數常量適合於int
,則其類型爲int
。所以,你的表達被評價爲:
long int k = (long int)((int)2000*(int)2000*(int)2000);
如果int
是不是大到足以容納相乘的結果,你會得到一個有符號整數溢出和不確定的行爲。所以,如果long
大到足以容納結果,你應該寫:
long k = 2000L * 2000L * 2000L;
的L
後綴強制字面來long
類型(long
相當於long int
)。
但在大多數平臺上,甚至long
僅僅是一個32位的,所以你必須使用long long
這是保證至少有64位:
long long k = 2000LL * 2000LL * 2000LL;
的LL
後綴力的類型字面值爲long long
。
0
您不能僅將這些值一起乘以普通精度整數,然後將結果轉換爲更高的精度,因爲結果已經在該點溢出。相反,操作數在乘以之前需要更高精度的整數。請嘗試以下操作:
#include <stdio.h>
int main(void)
{
long long int n = (long long int)2000*(long long int)2000*(long long int)2000;
printf("long long int operands: %lld\n", n);
return 0;
}
在我的機器,這給:
long long int operands: 8000000000
相關問題
- 1. flash:Math.pow計算大數的錯誤答案
- 2. Java:計算返回錯誤的答案?
- 3. 數學計算使用C++,錯誤的答案
- 4. C中的因子計算導致錯誤答案
- 5. 正確和錯誤的答案計數
- 6. 計算長期使用雙迴路的功率給出錯誤的答案在C中的C代碼
- 7. 錯誤答案從用C
- 8. 如何計算用戶輸入錯誤答案的次數(Python)
- 9. 使用提示中的答案進行計算
- 10. 添加長雙打給出了C中的錯誤的答案++
- 11. 錯誤答案
- 12. flex-bison計算器程序中的錯誤答案
- 13. 爲什麼涉及指數的C計算會產生錯誤的答案?
- 14. 計算答案天mySQL
- 15. 用長整數長計算錯誤
- 16. 計數數組長度,答案是錯的
- 17. 運算符超載的錯誤答案
- 18. 需要幫助計算答案,在C++小數
- 19. 函數不顯示計算的答案
- 20. Java:計算給出錯誤的答案,我的錯誤在哪裏?
- 21. 歐拉計劃錯誤的答案
- 22. Fwrite錯誤答案
- 23. 在C++計算中無法獲得正確答案
- 24. Python中的錯誤答案
- 25. 錯誤答案()在MATLAB
- 26. 計算系統錯誤率百分比答案
- 27. 選擇並計算SQL,但答案錯誤
- 28. bcmath時似乎給出了錯誤的答案,我計算
- 29. 正確的計算器與錯誤的答案
- 30. 時間到計算器給出錯誤的答案
長整型是不足以容納2000 * 2000 * 2000。使用long long int。 – Mukit09
你的概念.... –
那麼,2000 * 2000 * 2000有多大? – qwr