整数型(integer type)は、
コンピュータで
整数を扱うための
データ型です。
コンピュータが扱う
データ型の中でも最も基本的な部類に属します。多くの
プログラミング言語では、
整数型は固定長で、表現できる値の範囲が限定されていますが、より大きな範囲の
整数値を扱うためのライブラリや機能も提供されています。
歴史
パスカルの
機械式計算機など、数を処理対象としていた計算機械の歴史を振り返ると、
整数を扱うことは
コンピュータ以前から存在していました。
精度
コンピュータで
実数を表現するためによく用いられる
浮動小数点数は、有限の
ビット数で表現されるため、誤差を伴う近似値となります。一方、
整数は誤差なく正確に表現できます。ただし、
整数型も有限の
ビット幅で表現されるため、表現可能な範囲には限界があり、範囲を超えると
算術オーバーフローが発生します。
固定長と可変長
多くの
プログラミング言語では、組み込みの
整数型は固定長です。一般的に、8
ビット、16
ビット、32
ビット、64
ビットなど、8の倍数である
ビット幅を持ちます。
C言語のように処理系依存の
整数型を持つ言語もあり、`int`型や`long`型は、プロセッサのレジスタの
ワード幅に合わせたサイズが用いられます。これらの組み込み型は、
コンピュータ上で高速に処理できます。
一方で、可変長の
整数型も存在します。可変長の
整数型は、任意の値の
整数を扱うことができ、ライブラリを通じて利用することが一般的です。言語によっては、固定長と可変長がシームレスに切り替わることもあります。可変長
整数型は、大きな数を扱う際に利用され、BigNumやBigInt、多倍長
整数などと呼ばれます。
符号付きと符号無し
整数型には、正と負の両方の
整数を表せる符号付き
整数型と、0または正の
整数のみを表せる符号無し
整数型があります。符号付き
整数型は、負の数を表現できる代わりに、表現できる値の範囲が半分になります。符号無し
整数型は、
ビットの並びをそのまま数値として解釈しますが、符号付き
整数型では、負の値を表すためにいくつかの表現方法があります。
長さ
可変長
整数型は任意の長さを持つことができますが、固定長
整数型は処理系によって長さが定義されます。C/
C++の組み込み
整数型には、`int`の他に`short`と`long`がありますが、これらの長さは処理系によって異なり、上限値と下限値のみが規定されています。しかし、近年では、
ビット数と内部表現を明確にした固定幅
整数型(`int64_t`など)が標準化されています。固定幅
整数型は、特に
移植性や相互運用性が求められる場面で有用です。
暗号などで大きな
整数を扱う際には、固定サイズの
データ型を
配列や
構造体のような集成体で表現し、専用の関数やマクロを使って処理することもあります。
また、バイト(byte)や
[ワード]という単位で
整数型を表現することもあります。
固定小数点
固定小数点表現は、
整数の一部を小数として扱う表現法で、プログラマが
整数演算を組み合わせて実装します。
文字型
ASCII文字コード体系では、1文字を1バイトの
整数型として扱えます。しかし、多言語対応のためには、複数バイトで1文字を表現する符号化方式や、
Unicodeのような国際的な符号化方式が用いられます。
Javaの`char`型は、当初
Unicodeを表現するために16
ビットでしたが、後にサロゲートペアの導入により、1文字を2つの`char`で表す場合も発生しました。
論理演算に用いられる
ブーリアン型は、C/
C++では
整数型の一種として扱われます。
C++の`bool`型は`true`または`false`の値を取りますが、
整数型の一種です。
JavaやC#では、
ブーリアン型は
整数型とは別の型として扱われます。
列挙型
列挙型は、Cでは
整数型の一種として扱われます。
C++では
整数型とは異なる型ですが、
整数型に暗黙的に変換できます。
Javaの列挙型は参照型で、C#の列挙型は値型ですが、
整数型との相互変換が可能です。
ポインタ
ポインタは
メモリアドレスを抽象化した概念ですが、
整数型とポインタ型は同一ではありません。C/
C++ではポインタと
整数の間の変換は処理系定義です。ポインタ間の減算結果を格納する型として`ptrdiff_t`、ポインタと相互変換可能な
整数型として`intptr_t`と`uintptr_t`があります。
(各種
コンピュータ言語における標準
整数型の対応表は省略)
データモデル
C言語におけるデータモデルは、
整数型の
ビット数の割り当て方を示します。32
ビット環境ではILP32モデルが一般的でしたが、64
ビット環境では、IL32P64、LP64、ILP64など、異なるモデルが使用されています。
特に
マイクロプロセッサの64
ビット化に伴い、
整数型のサイズが環境によって異なるため、データモデルが重要となります。
まとめ
整数型は、
コンピュータにおける基本的な
データ型の一つであり、様々な種類と表現方法が存在します。プログラミングを行う際には、それぞれの特性を理解し、適切に使い分けることが重要です。