各整数型の表現範囲

こんにちは、めのんです!

前回は主に「limits.h」ヘッダで定義されるマクロを中心に整数型の最大値と最小値について解説しました。
今回はその続きで、各整数型の具体的な表現範囲について解説しようと思います。

整数型間の大小関係

Cにはいくつかの整数型があります。
それぞれ表現範囲が異なるんですが、型と型との表現範囲の大小関係が決まっています。
最初にそこから解説しますね。

ここで_Bool型はもっとも表現範囲が狭いことは明らかです。
列挙型についてはケースバイケースなのでここでは対象としません。
あらかじめご了承ください。

符号付き整数型の大小関係

まずは符号付き整数型の大小関係からです。
それぞれの型の間の関係は次のようになっています。

signed char ≦ short ≦ int ≦ long ≦ long long

です。

符号無し整数型の大小関係

次に符号無し整数型の大小関係です。
それぞれの型の間の関係は次のようになっています。

unsigned char ≦ unsigned short ≦ unsigned int ≦ unsigned long ≦ unsigned long long

です。

規格上保証される表現範囲

それでは規格上保証される最小限の表現範囲を解説します。
以下のように表にまとめてみました。

符号付き整数型の場合

まずは符号付き整数型の表です。

表現範囲
signed char -128~+127
short -32,767~+32,767
int -32,767~+32,767
long -2,147,483,647~2,147,483,647
long long -9,223,372,036,854,775,807~+9,223,372,036,854,775,807

char型が符号付きの場合はsigned char型の表現範囲と同じになります。

上の表を見ていただければおわかりかと思いますが、int型は16ビット以上であることが想定されています。
PCやサーバーのことしか考えなければ、今の時代にそんな環境はないと思われるかもしれません。
けれども、マイコン開発では8ビットや16ビットの環境もまだ多く使われています。

具体例を挙げると、ArduinoでおなじみのAVRなんかが8ビットマイコンです。
AVR向けのCコンパイラは当然int型が16ビットです。

符号無し整数型の場合

次に符号無し整数型の表です。

表現範囲
unsigned char 0~255
unsigned short 0~65,535
unsigned int 0~65,535
unsigned long 0~4,294,967,295
unsigned long long 0~18,446,744,073,709,551,615

char型が符号無し場合はunsigned char型の表現範囲と同じになります。


今回は簡単に済ませてしまいましたけど、ここを踏まえないと先に進めませんのでこんな感じで解説しました。
もう少し気の利いた内容になるように後日加筆するかもしれませんのでえ、そのときは何らかの形(おそらくTwitter)でお知らせしたいと思います。