首頁 > 後端開發 > C++ > 為什麼程式碼片段在將大整數文字指派給「long」變數時會失敗,但在使用「long long」時卻有效?

為什麼程式碼片段在將大整數文字指派給「long」變數時會失敗,但在使用「long long」時卻有效?

DDD
發布: 2024-11-08 11:12:02
原創
289 人瀏覽過

Why does the code snippet fail when assigning a large integer literal to a `long` variable, but works when using `long long`?

理解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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板