long int型(ロングイント)とは | 意味や読み方など丁寧でわかりやすい用語解説

long int型(ロングイント)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

ロングイント型 (ロングイントガタ)

英語表記

long int (ロングイント)

用語解説

long int型は、C言語やC++といったプログラミング言語で利用されるデータ型の一つである。データ型とは、プログラム内で扱うデータの種類を定義するものであり、例えば数値を扱うのか、文字を扱うのかなどを指定するために用いられる。その中でlong int型は、整数を格納するために特化した型であり、その名前が示す通り、標準的な整数型であるint型よりも長い、つまりより大きな範囲の整数値を扱うことができるように設計されている。コンピュータが扱うデータには、人口統計、天文学的な距離、あるいはシステムの経過時間(ナノ秒単位)など、非常に大きな数値や小さな数値が含まれることがある。通常のint型では表現しきれないこれらの数値を正確に扱うために、long int型のようなより広範囲をカバーするデータ型が必要とされる。

long int型の詳細を理解するには、まず基本となるint型との比較が不可欠である。int型は、プログラミングにおいて最も一般的に使用される整数型であり、そのサイズは処理系、つまりプログラムをコンパイルし実行する環境(OSやCPUアーキテクチャ)にとって最も効率の良いサイズが選ばれることが多い。現代の多くの環境では、int型は4バイト(32ビット)のメモリ領域を占有する。一方、long int型は、C言語の規格上、「int型以上のサイズを持つこと」が保証されている。これにより、int型では表現できない数値を格納する受け皿として機能する。long int型の具体的なサイズは処理系に依存するが、一般的には4バイトまたは8バイト(64ビット)であることが多い。例えば、サイズが4バイトの場合、符号付きであれば約-21億から+21億までの範囲の整数を表現できる。これが8バイトになると、その範囲は飛躍的に拡大し、約-922京から+922京という非常に広大な範囲の数値を扱うことが可能になる。

この「処理系に依存する」という特性は、long int型を扱う上で最も注意すべき点である。C言語の規格では、各データ型の正確なバイト数を定めておらず、sizeof(short int) <= sizeof(int) <= sizeof(long int) <= sizeof(long long int) というサイズの大小関係のみを規定している。このため、プログラマがlong int型を8バイトだと想定してコードを書いても、別の環境では4バイトとして扱われ、意図しないオーバーフロー(格納しようとした数値がデータ型の表現範囲を超えてしまうこと)を引き起こす可能性がある。特に、32ビット環境から64ビット環境への移行期にはこの問題が顕著であった。例えば、多くの64ビットのLinuxやmacOSではlong int型は8バイトとなるが、64ビットのWindowsでは後方互換性のために4バイトのままである。このような環境差は、異なるプラットフォームで動作するソフトウェアを開発する際に、移植性の問題を引き起こす原因となる。

long int型は、デフォルトで符号付き整数、つまり正の数、負の数、そしてゼロを扱う。これはsigned long intと明示的に記述するのと同じ意味である。しかし、扱う数値が非負(0以上)であることが分かっている場合、unsignedという修飾子を付けてunsigned long intとして宣言することができる。これにより、負の値を表現するために使われていたビット領域を正の数の表現に割り当てることができるため、表現可能な正の最大値が約2倍に広がる。例えば、4バイトのunsigned long intは0から約42億まで、8バイトであれば0から約1844京までの値を格納できる。これは、オブジェクトのIDやカウンター、メモリアドレスなど、負の値を取ることがないデータを扱う際に非常に有効である。

さらに、long int型よりもさらに大きな整数を扱う必要がある場合のために、long long int型が存在する。これはC99という規格で導入されたもので、最低でも8バイト(64ビット)のサイズを持つことが保証されている。これにより、long int型が4バイトの環境であっても、確実に64ビットの整数を扱いたい場合に利用される。

現代のシステム開発、特に移植性が重視されるプロジェクトにおいては、long int型のようにサイズが環境によって変動するデータ型よりも、サイズが明確に保証された固定幅整数型の使用が推奨される傾向にある。C99規格で導入された<stdint.h>ヘッダ(C++では<cstdint>)には、int32_t(32ビット符号付き整数)やint64_t(64ビット符号付き整数)、uint32_t(32ビット符号無し整数)といった型が定義されている。これらの型は、どの環境でコンパイルしても指定されたビット幅を持つことが保証されているため、処理系依存の問題を回避し、より堅牢で予測可能なコードを書くことができる。しかし、既存の多くのコードやライブラリでは依然としてlong int型が広く使用されているため、その特性と注意点を正確に理解しておくことは、システムエンジニアにとって不可欠な知識であると言える。

long int型(ロングイント)とは | 意味や読み方など丁寧でわかりやすい用語解説 | いっしー@Webエンジニア