ホームページ >バックエンド開発 >C++ >C/C で大きな整数を処理するのに 'long long' が不可欠なのはなぜですか?

C/C で大きな整数を処理するのに 'long long' が不可欠なのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-08 09:18:02718ブラウズ

Why is  'long long'  essential for handling large integers in C/C  ?

C/C の 'long long' を理解する

C/C では、数値を処理するためにデータ型の範囲が重要です。 「long long」データ型は、標準の「long」型よりも大きな整数値に対応するために導入され、より正確な操作が可能になります。

次の C/C コード スニペットを考えてみましょう。

#include <stdio.h>

int main() {
    int num1 = 1000000000;
    long num2 = 1000000000;
    long long num3;
    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;
}

このコードを実行すると、次の出力が出力されます:

4 4 8
1000000000 1000000000 0 18446744073709551615

出力はいくつかの興味深い動作を示しています:

  • 「long long」のサイズは 8 バイトです。 'int' および 'long' の 2 倍です。
  • 'num1' の値は 'int' 内に収まるため、正確に出力されます。
  • 'num2' は次と同じ値を保持します。 'num1' ですが、その 'long' 型により、より大きな数値を表すことができます。
  • 'num3' には、最初は値が割り当てられていないため、0 として出力されます。
  • 'num4' には、 0 のビット単位の反転。これにより、'long long' で可能な最大値が得られます。

次に、コメント行のコメントを解除しましょう。

num3 = 100000000000;

コンパイルはエラーで失敗します。 : 「エラー: 整数定数が Long 型には大きすぎます。」これは、リテラル値「100000000000」が「long」型で表現できる最大値を超えているためです。この問題を解決するには、接尾辞 LL:

num3 = 100000000000LL;

を使用して、このリテラルが「long long」であることを指定する必要があります。この変更により、コードは正常にコンパイルされ、実行されます。出力には、'num3' の正しい値が含まれるようになりました:

4 4 8
1000000000 1000000000 100000000000 18446744073709551615

このコードは、データ型の重要性と、C/C プログラミングで大きな整数値を処理するための 'long long' 型の使用を示しています。

以上がC/C で大きな整数を処理するのに 'long long' が不可欠なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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