本物のC

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、また処理系はcharsigned charunsigned charの一方と同じ範囲・表現・振る舞いを持つ様に定義しなければならない6.2.5#15

intは「実行環境のアーキテクチャから言って自然なサイズ」を持つ6.2.5#5

符号付き/符号無しそれぞれについて上記の型の値の範囲は、conversion rank(「C の詳細:型変換」を参照)がより大きいものはより小さいものの範囲を含む様に、つまり次の大小関係(正確には包含関係)を満たさなければならない6.2.5#8

signed charshortintlonglong long

unsigned charunsigned shortunsigned intunsigned longunsigned 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-10FLT_*DBL_*LDBL_*はそれぞれfloatdoublelong 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

floatdoublelong double