首頁  >  文章  >  後端開發  >  為什麼「long long」在 C/C 中的行為與預期不同?

為什麼「long long」在 C/C 中的行為與預期不同?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-08 10:04:01134瀏覽

Why does  `long long` behave differently than expected in C/C  ?

理解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;
}

取消註解將100000000000 分配給num3 的行時,編譯此程式碼會引發錯誤:「整數常數是對於長型來說太大了。

此行為源自於對類型推論的誤解。文字 100000000000 是一個整數常數,但其值超出了 int 資料型別的範圍(32 位元)。因此,它被設計為一個長類型常數。但是,預設情況下,C 和 C 將此類文字視為 int,從而導致錯誤。

要解決此問題,需要使用後綴明確指定文字的類型。 LL 後綴將 num3 宣告為 long long 類型:

long long num3 = 100000000000LL;

此變更允許程式碼成功編譯,不會出現任何錯誤或意外行為。

以上是為什麼「long long」在 C/C 中的行為與預期不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn