整数型(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
ビット化に伴い、
整数型のサイズが環境によって異なるため、データモデルが重要となります。
まとめ
整数型は、
コンピュータにおける基本的なデータ型の一つであり、様々な種類と表現方法が存在します。プログラミングを行う際には、それぞれの特性を理解し、適切に使い分けることが重要です。