コンテンツにスキップ

C言語/long

出典: フリー教科書『ウィキブックス(Wikibooks)』

概要

[編集]

long 型は、C 言語における整数型の一つであり、int 型よりも広い範囲の整数を扱うことができます。long は単独で型名として使用されるだけでなく、long longlong double のように他の型と組み合わせてサイズを修飾する役割も果たします。

C 言語の標準では、long 型のサイズはプラットフォーム依存ですが、通常 4 バイト(32 ビット)または 8 バイト(64 ビット)です。long long 型は C99 で追加され、より大きな整数範囲を提供します。

long 型の背景

[編集]

C 言語の初期から long 型は存在しており、int 型よりも大きな数値を扱う必要がある場合に使用されてきました。long long 型は C99 で追加され、64 ビット整数の標準的なサポートが可能になりました。また、long double は倍精度浮動小数点(double)よりも精度の高い浮動小数点演算を可能にするために設計されています。

C 言語の long 型のサイズは、処理系によって異なります。代表的な環境での long 型のサイズは以下のようになります。

環境 int long long long
32ビットシステム 4B 8B 8B
64ビットシステム 4B 8B 8B

long 型のバリエーション

[編集]

C 言語では、long を含む整数型として以下のようなバリエーションが存在します。

型名 説明
long int より大きい可能性のある整数型
long long C99 で導入された 64 ビット整数型
unsigned long 符号なし long
unsigned long long 符号なし long long

また、long double は浮動小数点数型で、通常 double よりも高精度な計算を行うことができます。

long 型の使用例

[編集]

long 型の基本的な使用例

[編集]
#include <stdio.h>
int main() {
    long num = 1000000L;  // L サフィックスは long 型を明示
    printf("long: %ld\n", num);
    return 0;
}

%ld を使うことで long 型の値を printf で正しく出力できます。

long long 型の使用

[編集]
#include <stdio.h>
int main() {
    long long bigNum = 9223372036854775807LL;  // LL サフィックスを使用
    printf("long long: %lld\n", bigNum);
    return 0;
}

C99 以降では、long long 型が追加され、通常 64 ビットの整数を扱うことができます。%lld を使って出力します。

unsigned long 型の使用

[編集]
#include <stdio.h>
int main() {
    unsigned long positiveNum = 4000000000UL;  // UL サフィックスを使用
    printf("unsigned long: %lu\n", positiveNum);
    return 0;
}

符号なし long 型を使用することで、より大きな正の数を格納することができます。%lu を使って出力します。

long double 型の使用

[編集]
#include <stdio.h>
int main() {
    long double pi = 3.141592653589793238L;  // L サフィックスを使用
    printf("long double: %.18Lf\n", pi);
    return 0;
}

long double 型は、通常 double よりも高精度な浮動小数点数を扱えます。%Lf を使って出力します。

long 型の使用上の注意

[編集]
  1. オーバーフローに注意
    • long 型の範囲を超える値を代入すると、オーバーフローが発生する可能性があります。
    • 符号なし unsigned long 型では、負の値を扱えないため、注意が必要です。
  2. long 型のサイズは環境依存
    • sizeof(long) を使用して、プログラムの実行時に long 型のサイズを確認することが推奨されます。
       #include <stdio.h>
    
       int main() {
           printf("Size of int: %zu bytes\n", sizeof(int));
           printf("Size of long: %zu bytes\n", sizeof(long));
           printf("Size of long long: %zu bytes\n", sizeof(long long));
           return 0;
       }
    
  3. long double の精度は処理系による
    • long double の精度は、コンパイラやハードウェアによって異なります。
    • 一部の環境では、long doubledouble と同じ精度を持つ場合もあります。

まとめ

[編集]
  • long 型は int よりも広い範囲の整数を扱える型であり、環境によって 4 バイトまたは 8 バイトのサイズを持つ。
  • long long 型は C99 で導入され、64 ビットの整数を標準的に扱うことが可能。
  • long double 型は高精度な浮動小数点演算に使用されるが、環境によって精度が異なる。
  • sizeof を使って型のサイズを確認し、環境依存の影響を受けないようにすることが重要。

このように、long 型は単体の型名としても使用され、long longlong double のようにサイズ修飾子としての役割も持っています。C 言語のプログラミングにおいて、整数や浮動小数点数の精度と範囲を考慮する際に適切な型を選択することが重要です。