理解C/C 中「long long」的行為
在C/C 中使用整數資料型別時,至關重要的是了解整數表示的細微差別。特定的資料類型「long long」經常會引發有關其行為的問題。
考慮以下程式碼片段:
#include <stdio.h> int main() { int num1 = 1000000000; long num2 = 1000000000; long long num3; // num3 = 100000000000; long long num4 = ~0; printf("%u %u %u", sizeof(num1), sizeof(num2), sizeof(num3)); printf("%d %ld %lld %llu", num1, num2, num3, num4); return 0; }
執行此程式碼時,如果您執行以下操作,則可能會遇到錯誤:取消註解行:
// num3 = 100000000000;
錯誤讀取:
「錯誤:整數常數是對於長類型來說太大了」
但是,當您編譯並運行程式碼而不取消註解該行時,它輸出的值明顯大於10000000000。為什麼?
理解整數文字和資料型別
在 C/C 中,整數文字是常數代表數值。整數文字的類型由後綴決定,例如“L”或“LL”。如果沒有後綴,則預設將文字視為“int”。
在提供的程式碼中,值「100000000000」太大,無法用「long」資料型別表示。因此,您必須新增後綴來指示預期的資料類型。
正確分配文字
要解決錯誤,您應該使用正確的後綴分配文字,如下所示:
long long num3 = 100000000000LL;
後綴'LL '表示文字應該是被視為「long long」類型,可以容納更大範圍的值。
更新後的行將值“100000000000”分配給“num3”,而不會觸發錯誤。這確保了變數“num3”可以保存並操作預期的大數值。
以上是為什麼程式碼片段在將大整數文字指派給「long」變數時會失敗,但在使用「long long」時卻有效?的詳細內容。更多資訊請關注PHP中文網其他相關文章!