第4.7節補足 — 数値と文字の違い

第 4.7 節補足 — 数値と文字の違い
C における「文字データ」の扱い
• C のソースでは,文字 a を ’a’ と書く。単に a と書けば,それは変数 a の内容を意味す
る。’ (単一引用符) の中に書けるのは一文字のみである。
• 文字を変数に格納するには char 型の変数を使うのが普通である。
• printf 文で,第 2 引数以降に指定した値を文字として表示するには,%c を使う。
char c ;
/* char 型変数 c の宣言 */
c = ’a’;
/* 変数 c に文字 a を代入 */
printf("%c\n", c); /* a と表示される */
• [注意] ’a’ (文字 a) と "a" (文字列 a) は異なるものである。
printf("%s\n", "a");
printf("%s\n", ’a’);
/* a と表示される */
/* 間違い */
printf("%c\n", ’a’);
/* a と表示される */
コンピュータ内部でのデータ表現
• コンピュータ内部では,すべてのものは 0 と 1 の並びである。
• 整数は 2 進数を使って 0 と 1 の並びとして表現される(ここでは負の数は考えない)。
整数 1: 00000000 00000000 00000000 00000001
整数 2: 00000000 00000000 00000000 00000010
整数 3: 00000000 00000000 00000000 00000011
• 文字は ASCII (アスキー) コードに従い,8 個の 0 と 1 で表現される(ここでは,いわゆる
半角の英数字のみ考える。ACCII コードの全体は教科書の付録 C を参照のこと。)。0 と 1
の並びを 2 進数と見なせば,括弧内に記したとおり,ASCII コードを 10 進の整数で表せる。
文字 ’A’: 01000001 (65)
文字 ’a’: 01100001 (97)
文字 ’1’: 00110001 (49)
すなわち,コンピュータ内部では,文字も整数で表現されている。また,
「数値(整数)の 1」
と「数字(文字)の 1」は異なるものであることに注意。
printf("%c(%d)\n", ’a’, ’a’); /* a(97) と表示される */
printf("%d,%d\n", 1, ’1’); /* 1,49 と表示される */
printf("%d\n", ’1’ + ’1’);
/* 98 と表示される */
1
データの型とサイズ
• コンピュータ内でのデータの表現は,すべて 0 と 1 の並びであるから,それを文字と見なす
か,整数と見なすか,によってデータの意味するものが異なる。このようなデータの区別を
データの型 (type) という。なお,1.0 などの実数は整数とは異なる方法で,0 と 1 の並びと
して表現されている(浮動小数点形式)。
• 一つのデータを表すのに用いる 0 と 1 の個数はデータ型に応じて決まっている。この個数を
データ型のサイズという。
– 文字 (char) 型のサイズは 8 bit (= 1 byte) である。
– 整数 (int) 型のサイズは機種依存であるが,最近のコンピュータでは,32 bit (= 4 byte)
であることが多い。int 型で扱える整数の最大値は,int 型のサイズによって決まる。
整数値で文字を扱う
• char 型変数には 8 bit で表現可能な整数値 (負の数を扱わないときは 0 から 255) を代入す
ることができる。
• int 型変数に文字を代入することも可能である。
char c;
/* char 型変数 c の宣言 */
int i;
/* int 型変数 i の宣言 */
c = 97;
/* ’a’ を意味する 10 進整数値 97 を代入 */
printf("%c\n", c); /* a と表示される */
i = ’a’;
/* i に 97 を代入 */
printf("%c(%d)\n", i, i); /* a(97) と表示される */
キーボードからの数値と文字の入力
• キーボードからの入力はすべて文字である。例えば,12 とタイプすれば,整数の 12 ではな
く,文字の ’1’ と ’2’ を入力したことになる。
• scanf は,第一引数に %d があれば,キーボードからタイプした数字の並びを 10 進数の整数
と見なし,それを整数に変換してから変数に格納する。%d では数字以外の入力は扱えない。
int i;
scanf("%d", &i);
/* キーボードから入力する数字を整数として i に格納 */
printf("%d\n", i); /* i の内容を整数として表示 */
• getchar を使うと,キーボードから 1 文字入力し,それを文字のまま扱える。ただし,getchar
がキーボードから取得した文字は int 型のサイズを持つこととされている。
int i;
i = getchar(); /* キーボードから入力する 1 文字を i に代入 */
printf("%c\n", i); /* i の内容を文字として表示 */
2