整数型
整数型(せいすうがた、テンプレート:Lang-en)は、プログラムのデータ型の1つまたは1群で、整数の部分集合を取り扱うものである。C言語やJavaなどの多くのプログラミング言語において、整数型は実際には整数の有限な部分集合のみを取り扱う。
プログラムで扱うもっとも単純な単位であり、コンピュータの初期から概念として存在している。
目次
種類
符号あり整数と符号なし整数
正負両方の整数を表せる符号あり整数型と、非負(0または正)の整数だけを表せる符号なし整数型とがある。符号あり整数型は、負数を表せるかわりに、表せる正数の上限は低い。
テンプレート:Main 符号なし整数は、ビットの並びをそのまま数値として解釈するが、符号あり整数では、負の値の表現方法にいくつか種類が存在する。
短精度整数型と長精度整数型
多くの言語には、通常の整数型より表せる範囲が狭い(そのかわりメモリ消費が少ない)短精度整数型(単精度整数型)と、範囲が広い(そのかわりメモリ消費が多く、低速なこともある)長精度整数型がある。さらに範囲が広い倍長精度整数型があることもある。
短精度整数型、整数型、長精度整数型、倍長精度整数型の表せる範囲は言語や処理系によって違うので、曖昧さをなくすために○ビット整数型、○バイト整数型という言いかたもある。また、バイト型、ワード型、ダブルワード型などという言いかたもある。
文字型
文字は、コンピュータの内部では整数で表現されている。そのため、多くの言語は文字型を整数型の一種として扱う。ただし、その関係性は言語によって文字型と整数型が互いに型変換可能であるものから、独立した文字型がなく、文字型に相当するものが完全に整数型の分類の1つに組み込まれたもの(Cなど)まで様々である。
多倍長整数型
多倍長整数型は、事実上任意の範囲(たとえば数百桁~数百万桁)の整数を表すことができる。通常、ソフトウェアで実装され、内部的には整数の配列で表現されている。
固定小数点実数型
固定小数点実数型は、内部的には浮動小数点実数型より整数型に近いため、整数型の一種とすることがある。
ポインタ
ポインタは多くの場合、メモリアドレスを指す整数値として実装されている。ただし、ポインタに対する演算はCに代表されるように、通常の整数とは異なった扱いを受けることが多い。
データ型名
符号 | ビット数 | バイト数 | C/C++ (C99, C++11) |
C/C++ (32ビット, LLP641) |
C/C++ (LP641) |
Java | C# | SQL92 | VB(Ver6以前) | COBOL(代表例) |
---|---|---|---|---|---|---|---|---|---|---|
有 | 8 | 1 | int8_t | signed char2 | byte | sbyte | ||||
有 | 16 | 2 | int16_t | short | short | short | smallint, int2 | Integer | COMP-1(1から4桁) | |
有 | 32 | 4 | int32_t | int long |
int | int | int | integer, int, int4 | Long | COMP-1(5から9桁) |
有 | 64 | 8 | int64_t | long long | long long long |
long | long | bigint, int8 | COMP-1(10から18桁) | |
無 | 8 | 1 | uint8_t | unsigned char | byte | tinyint, int1 | Byte | BINARY-CHAR UNSIGNED(機種依存) | ||
無 | 16 | 2 | uint16_t | unsigned short | char | ushort | COMP-1(1から4桁) | |||
無 | 32 | 4 | uint32_t | unsigned int unsigned long |
unsigned int | uint | COMP-1(5から9桁) | |||
無 | 64 | 8 | uint64_t | unsigned long long | unsigned long unsigned long long |
ulong | COMP-1(10から18桁) |
1 C99/C++11 には int64_t
など固定幅整数型があるが、古い C/C++ では整数型の絶対的なビット数は規格で定められていないため、様々なビット数の割り当て方が存在し、この割り当て方を定めた物をデータモデルという。多くの16/32ビット環境と Windows 64ビット環境ではintとlongが32ビットでポインタが64ビット、すなわち IL32P64(別名:LLP64)モデルが使用されている。また、Unix 系など多くの64ビット環境では I32LP64(別名:LP64)モデルが使用されている[1]。
2 C/C++ では単なる char 型の符号有/無については規定されておらず、処理系によって異なる。
3 現段階においてint128以降は標準実装化されておらず、自作で関数化されている場合が多いようである。理論上はメモリ上での利用限界まで設定可能である。