「プログラム上の全てのデータには必ず何らかのデータ型がある。」
ここまでにデータ型として整数型を学びました。ここでは
・そのほかのデータ型をまとめ
・変数に対する「定数」の存在
を学びます。
あまりなじみのないC言語のルールが多く出てきますが、何度も確認して覚えていきましょう。
値を格納する変数には「どのような種類の値か」を示すデータ型を指定する必要があります。 以下は主な基本データ型の一覧です。
| 型名 | 意味 | 使用例 |
|---|---|---|
| int | 整数型 | 10, -5, 0 |
| double | 倍精度小数点 | 3.14, -2.7 |
| float | 単精度小数点 | 3.14f, -0.5f |
| char | 文字型 | 'A', 'b', '7' |
| 文字列 | 文字の並び | "Hello", "abc" |
int は整数専用の型で、最も基本的な数値型(コンピュータにとって都合がよい)。double は実数(高精度)を扱う。float は実数を扱うが double より精度が低い。char は1文字のみを格納。char の配列(後述)です。int x = 10;
この例では、10 が定数です。
以下もすべて定数:
3.14, 'A', "Hello", 0xFF, 0755
3.14 ・・・実数型(float)定数
'A' ・・・文字(char)型定数
"Hello"・・・文字列(char配列)定数
0xFF・・・整数型(int)定数 16進数
0755・・・整数型定数 8進数
C言語では、定数を書いた時点でその値に応じたデータ型が自動的に決まります。
| 表現 | データ型 | 備考 |
|---|---|---|
100 |
int | 整数 |
3.14 |
double | 倍精度実数 |
3.14f |
float | f をつけると float型 |
'A' |
char | 1文字、シングルクォート |
"abc" |
char配列 | 文字列(文字の配列) |
0x10 |
int | 16進数リテラル |
075 |
int | 8進数リテラル |
| 表記形式 | 意味 | 例 |
|---|---|---|
10 |
10進数(通常) | int x = 10; |
0xFF |
16進数 | int x = 0xFF;(=255) |
0755 |
8進数 | int x = 0755;(=493) |
3.14 |
実数(double) | double d = 3.14; |
3.14f |
実数(float) | float f = 3.14f; |
0x を前に付けて表します。0 を付けて表します(※数字の先頭にゼロがあると8進数になる点に注意)。f を付けると float 型になります。C言語では、7(数値)と '7'(文字)はまったく別のものです。
| 表現 | 内容 | 型 |
|---|---|---|
7 |
数値の 7 | int |
'7' |
文字の「7」 | char |
7 は加算・乗算などの計算に使える数値。'7' は文字としての扱いで、文字コード(ASCIIコード)に基づいて保存されます。'A' は 65 という数値に対応しますが、見た目は「A」です。ASCIIコードの全体表はこちらから確認できます:
👉 ASCIIコード一覧(Wikipedia)
代表的な文字の一部:
| 文字 | 10進 | 16進 | 文字 | 10進 | 16進 |
|---|---|---|---|---|---|
| 'A' | 65 | 0x41 | 'a' | 97 | 0x61 |
| 'B' | 66 | 0x42 | 'b' | 98 | 0x62 |
| '0' | 48 | 0x30 | '1' | 49 | 0x31 |
| '!' | 33 | 0x21 | '?' | 63 | 0x3F |
以下のコードを入力して、実際に int, double, char 型の定数や変数を使ってみましょう。
#include <stdio.h>
int main(void) {
int score = 90;
double rate = 0.85;
char grade = 'A';
printf("スコアは %d 点です\n", score);
printf("成功率は %.2f です\n", rate);
printf("評価は %c です\n", grade);
return 0;
}
score は整数型(int)の変数rate は実数型(double)の変数grade は1文字型(char)の変数実行結果を見て、変数に入った定数がどのように画面に表示されるか確認してみましょう。
5 の型は?int a = 5;
ア. 文字型定数
イ. 整数型定数
ウ. 実数型定数
エ. 整数型変数
正解と解説
正解:イ. 整数型定数
5 は定数で、整数リテラルです。a は変数ですが、5 自体は型が int の定数です。
'!' の型は?char mark = '!';
ア. 文字型定数
イ. 整数型変数
ウ. 実数型定数
エ. 文字列定数
正解と解説
正解:ア. 文字型定数
'!' は1文字で、シングルクォーテーションで囲まれており、char 型の定数です。
rate の型は?float rate = 0.05f;
ア. 実数型定数(float)
イ. 実数型変数
ウ. 整数型変数
エ. 文字型定数
正解と解説
正解:イ. 実数型変数
変数 rate の型は float。右辺の 0.05f は float 型の定数ですが、質問は rate の型を問うています。
ア. 100
イ. int number = 100;
ウ. '1'
エ. 3.14f
正解と解説
正解:イ. int number = 100;
これは整数型(int)の変数宣言。その他は定数や異なる型の例です。
ア. 'A'
イ. "A"
ウ. 65
エ. char c = 'B';
正解と解説
正解:ア. 'A'
文字定数は1文字を ' ' で囲んだ形式です。"A" は文字列、65 は整数定数、char c = 'B'; は文字型変数です。
ア. 3.14
イ. 3.14f
ウ. "3.14"
エ. 3
正解と解説
正解:イ. 3.14f
f をつけることで float 型の定数になります。何もつけないと double 型とみなされます。
name のデータ型は?char name[] = "Ken";
ア. 文字型定数
イ. 文字列定数
ウ. char配列
エ. charポインタ
正解と解説
正解:ウ. char配列
"Ken" は文字列リテラルで、char 型の配列として扱われます。
'A' + 1 の結果は?char c = 'A' + 1;
printf("%c", c);
ア. 'B'
イ. 'A'1
ウ. 66
エ. エラー
正解と解説
正解:ア. 'B'
'A' は ASCIIコードで 65、+1 すると 66。これは 'B' に対応します。
ア. 0x20
イ. 0b100
ウ. 0755
エ. 8.0
正解と解説
正解:ウ. 0755
先頭に 0 をつけると8進数リテラルになります。0x は16進数、0b はC標準では使えません。