整数型の種類・符号あり/なし・サイズの違いを整理する。
宣言と同時に値を入れることを初期化という。
その後、同じ変数に別の値を入れることを再代入という。
int x = 5; // 初期化(宣言と同時に値を入れる)
x = 10; // 再代入(値の上書き)
整数型にはサイズや符号の違いで複数の種類がある。
以下はすべて Visual Studio(MSVC)での値である。環境によって異なる型がある点に注意。
| 型名 | 符号 | サイズ | 表現できる範囲 | 使いどころ |
|---|---|---|---|---|
int |
あり(±) | 4 バイト | -2,147,483,648 ~ 2,147,483,647 | 基本。迷ったらこれ |
unsigned int |
なし(0以上) | 4 バイト | 0 ~ 4,294,967,295 | 負にならない数(個数・サイズなど) |
short |
あり(±) | 2 バイト | -32,768 ~ 32,767 | 省メモリが必要な場合 |
unsigned short |
なし(0以上) | 2 バイト | 0 ~ 65,535 | 小さな正の整数 |
long |
あり(±) | 4 バイト ※ | -2,147,483,648 ~ 2,147,483,647 | Windows では int と同じサイズ |
long long |
あり(±) | 8 バイト | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 非常に大きな整数 |
unsigned long long |
なし(0以上) | 8 バイト | 0 ~ 18,446,744,073,709,551,615 | 巨大な正の整数 |
char |
あり(±) | 1 バイト | -128 ~ 127 | ASCII文字・1バイトの小さな数値 |
unsigned char |
なし(0以上) | 1 バイト | 0 ~ 255 | バイト操作・画像データなど |
long のサイズは環境依存。Windows(Visual Studio)では 4 バイトで int と同じ。long long を使うほうが確実。
signed(符号あり)は省略可能。int と書くだけで signed int と同じ意味になる。int を使えばよい。
同じバイト数でも、符号あり(signed)と符号なし(unsigned)では表現できる範囲が変わる。
ビット数は同じなので、負の範囲をなくした分、正の上限が2倍になる。
signed int a = -10; // 負の数もOK(通常はこちら)
unsigned int b = 10; // 正の数のみ。負を代入すると意図しない値になる
signed int : |-----------|-----------|
-2,147,483,648 0 2,147,483,647
unsigned int : |-------------------------|
0 4,294,967,295
unsigned 変数に代入すると、非常に大きな正の整数になる(2の補数の仕組みによる)。| 場面 | 使う型 |
|---|---|
| 通常の整数計算(迷ったらこれ) | int |
| 負にならないことが確定している数 | unsigned int |
| 非常に大きな整数(数十億以上) | long long |
| メモリを節約したい小さな数 | short |
| 1文字・1バイトのデータ | char |
Q1. int と unsigned int の違いとして正しいものはどれか。
ア. unsigned int は文字列しか使えない
イ. int は整数だが unsigned int は実数になる
ウ. unsigned int は正の整数と 0 しか扱えない
エ. int は範囲が狭すぎて使えない
正解:ウ
unsigned int は負の数を扱えず、0 以上の整数だけを表現できる。
その分、正の上限が int の約 2 倍になる。
Q2. 次のコードで変数 b に入る値として正しいものはどれか。
int a = -10;
unsigned int b = a;
ア. -10
イ. 10
ウ. 0
エ. 非常に大きな正の整数
正解:エ
負の値を unsigned に代入すると、2の補数の仕組みで非常に大きな正の整数(この場合 4,294,967,286)になる。
意図しない動作になるため、符号の違う型への代入は注意が必要。
Q3. Visual Studio(Windows)環境で long 型のサイズとして正しいものはどれか。
ア. 2 バイト
イ. 4 バイト
ウ. 8 バイト
エ. 環境に関係なく常に 8 バイト
正解:イ
Windows(MSVC)では long は 4 バイトで int と同じサイズ。
8 バイトの整数が必要なら long long を使う。
Q4. 非常に大きな整数(数十億以上)を扱うのに最も適した型はどれか。
ア. short
イ. int
ウ. long long
エ. char
正解:ウ
long long は 8 バイトで、約 ±922 京まで扱える。
Windows では long が 4 バイトしかないため、大きな整数には long long を使う。