C の詳細:型の定義
整数型
値の範囲
整数型は少なくとも以下の範囲の値を表現できなければならない5.2.4.2.1#1。
型 | 最小値 | 最大値 |
---|---|---|
signed char | -127 | +127 |
unsigned char | 0 | 255 |
short | -32767 | +32767 |
unsigned short | 0 | 65535 |
int | -32767 | +32767 |
unsigned int | 0 | 65535 |
long | -2147483647 | +2147483647 |
unsigned long | 0 | 4294967295 |
long long | -9223372036854775807 | +9223372036854775807 |
unsigned long long | 0 | 18446744073709551615 |
charは basic execution character set の文字を格納できるほど大きくなければならず6.2.5#3、また処理系はcharをsigned charかunsigned charの一方と同じ範囲・表現・振る舞いを持つ様に定義しなければならない6.2.5#15。
intは「実行環境のアーキテクチャから言って自然なサイズ」を持つ6.2.5#5。
符号付き/符号無しそれぞれについて上記の型の値の範囲は、conversion rank(「C の詳細:型変換」を参照)がより大きいものはより小さいものの範囲を含む様に、つまり次の大小関係(正確には包含関係)を満たさなければならない6.2.5#8。
unsigned char ≦ unsigned short ≦ unsigned int ≦ unsigned long ≦ unsigned long long
(実際の範囲はlimits.hのマクロにより確認できる。)
_Boolは値 0 と 1 を格納できるほど大きくなければならない6.2.5#2。
値の表現
規格はunsigned charでさえ padding bit を持つ事を許容している6.2.6.2#1。即ち値の表現に使われないビットが存在してもよい事になっている。
符号付き整数について、負の数の表現は以下の何れかでなければならず、その選択は implementation-defined である6.2.6.2#2。
- 符号ビットと絶対値
- 2の補数
- 1の補数
符号付き整数型に於いて符号ビットが0の表現は、対応する符号無し整数型でも同じ値の有効な表現でなければならない6.2.6.2#5。
浮動小数点型
浮動小数点型は以下の項目について、ここに示された値と同符号かつ絶対値がそれ以上となる様に実装されなければならない5.2.4.2.2#8-10。FLT_*、DBL_*、LDBL_*はそれぞれfloat、double、long doubleについての項目である(ただしFLT_RADIXは共通)。
項目 | 値 | 説明 |
---|---|---|
FLT_RADIX | 2 | 内部表現の基数 |
DECIMAL_DIG | 10 | 全ての浮動小数点型の値を可逆的に表現できる十進桁数 |
FLT_DIG | 6 | 浮動小数点型により全ての値が可逆的に表現される十進桁数 |
DBL_DIG | 10 | |
LDBL_DIG | 10 | |
FLT_MIN_10_EXP | -37 | 10 の冪乗が正規化された浮動小数点数の範囲内にある最小の負の整数 |
DBL_MIN_10_EXP | -37 | |
LDBL_MIN_10_EXP | -37 | |
FLT_MAX_10_EXP | +37 | 10 の冪乗が表現可能な有限の浮動小数点数の範囲内にある最大の整数 |
DBL_MAX_10_EXP | +37 | |
LDBL_MAX_10_EXP | +37 | |
FLT_MAX | 1E+37 | 表現可能で有限な最大の浮動小数点数 |
DBL_MAX | 1E+37 | |
LDBL_MAX | 1E+37 | |
FLT_EPSILON | 1E-5 | 1 と、浮動小数点型で表現可能な 1 より大きい最小の数の差 |
DBL_EPSILON | 1E-9 | |
LDBL_EPSILON | 1E-9 | |
FLT_MIN | 1E-37 | 正規化された正の最小の浮動小数点数 |
DBL_MIN | 1E-37 | |
LDBL_MIN | 1E-37 |
浮動小数点型の値の範囲は次の大小関係を満たさなければならない6.2.5#10。