C言語(とC++言語)のint
やchar
といった基本型では、他のプログラミング言語とは少し異なる定義がされています。一般的なPC環境では「char
は1バイト(8ビット)の文字型、int
は4バイト(32ビット)の整数型」のように簡易的に説明されることもありますが、厳密なプログラミング言語Cの仕様説明としては正しくありません。実際には次のように定義されます:
-
int
型:16ビット以上のビット幅をもつ符号付き整数型。負数表現は"2の補数"とは限らず、"1の補数"または"符号ビット+絶対値"でもよい。 -
char
型:8ビット以上のビット幅をもつ整数型。負数表現はint
型に同じ。
かなり偏執的に思えるでしょうが、C言語は多種多様な計算機環境で利用されることを想定しており、int
やchar
といった基本部品に対してさえ非常に緩い制約しか課さないのです。
もう2017年なんだけど?
と、ここまでが歴史的経緯です。ANSI Cとして標準化されてから30年近く経とうとしている2017年現在、char
型が8ビットより大きい環境は現存するのでしょうか?
StackOverflowで見つけた "Exotic architectures the standards committees care about" によると、UNISYS社メインフレーム ClearPath Forward Dorado Systemsが 現役の9ビットマシン、つまりCHAR_BIT==9
な環境のようです。これ以外にも:
- 36ビット ワード
- 負数表現は "1の補数"
- 浮動小数点数がIEEE 754 非互換
という変わり者っぷりを発揮しています。同マシンのOSには OS 2200 が搭載されており、少なくとも2015年に最新版がリリースされているようです。
なお上記以外だと、DSP(Digital Signal Processor)環境などではchar
型のビット数(CHAR_BIT
)が16や24や32の場合もあるようですが、9ビットマシンのインパクトには敵いませんね...