ホームページ  >  記事  >  バックエンド開発  >  `long long` が C/C で予想と異なる動作をするのはなぜですか?

`long long` が C/C で予想と異なる動作をするのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-08 10:04:01132ブラウズ

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

C/C の Long Long を理解する

C および C でさまざまなデータ型を扱う場合、それぞれのニュアンスを理解することが重要ですタイプ。よくある誤解の 1 つは、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 に割り当てている行のコメントを解除すると、エラーが発生します。ロングタイプには大きすぎます。」ただし、コメント行を含むコードを実行すると、10000000000 より大きい値が出力されます。

この動作は、型推論に関する誤解に起因します。リテラル 100000000000 は整数定数ですが、その値は int データ型 (32 ビット) の範囲を超えています。したがって、これはlong型定数として意図されています。ただし、デフォルトでは、C と C はそのようなリテラルを int として認識するため、エラーが発生します。

これを解決するには、サフィックスを使用してリテラルの型を明示的に指定する必要があります。 LL サフィックスは、num3 を long long 型として宣言します:

long long num3 = 100000000000LL;

この変更により、コードはエラーや予期せぬ動作を起こすことなく正常にコンパイルできるようになります。

以上が`long long` が C/C で予想と異なる動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。