はじめに
こんにちは。ぐぅです。
前回は、 getchar( ) で入力した 1 を printf ( “ %d ” ); で出力すると 1 が出力されないということを学びました。
今回は、 1 を入力したのに 49 が出力された謎に迫りたいと思います。
ポイントは ASCII コードです。
例題
まず例として、「 a 」を入力した場合を考えてみましょう。
以下のプログラムで char 型変数 ch に「 a 」を代入します。
出力方法としては printf ( “ %c ” ); と printf ( “ %d ” ); の 2 種類を試してみます。
#include <stdio.h>
int main (void)
{
char ch; // char型の変数 ch を定義
printf ( “ 文字を入力してください ” ); //コマンドラインから文字( a )を入力
ch = getchar(); //入力した文字( a )を ch に代入
printf ( “ch/c : %c ” . ch); //文字として ch を出力
printf( “ ¥n ” );
printf ( “ch/d : %d ” , ch); // 10進数で ch を出力
return 0;
}
このプログラムを実行するとどんな値が出力されるでしょうか?
出力結果
最初に出力された「 a 」は文字として出力されたもの。
2 番目に出力された「 97 」は a の ASCII コードを示しています。
ここで ASCII コードについて少し深く考えてみます。
そもそもなぜ ASCII コードは必要なのか?
コンピューターの中はビットの世界です。 0 か 1 でしか表現することができません。
しかし私たちは 0 と 1 以外にも、様々な文字や記号を使用します。
「どうしたら文字や記号をビットの世界で表現できるだろうか…」
「…文字や記号に 0 と 1 のみでできたコードを当てはめればいいのでは!」
そう、これこそが「 ASCII コード」なのです!
でもちょっと待って!!
先ほどのプログラムで出力した「 a 」の ASCII コードは「 97 」。
0 でも 1 でもありません。あれ?おかしいな… (-_-;)
心配しなくても大丈夫!これは printf ( “ %d ” ); が 10 進数表示だからです。
実際は 0 と 1 のみでできたコード( 2 進数)が当てはめられています。
ここまでで「 ASCII コード」という言葉がたくさん出てきましたが、
なんとなくしか分からない…という人もいると思います。
そんな人もそうでない人も、百聞は一見にしかず!
実際に ASCII コード表を見てみてください (^^)
ASCII コード表はこちら♪
本題
では本題に戻ります。
char 型の変数 num に数字の「 1 」を入力したとき、なぜ「 49 」が出力されるのか?
これも ASCII コード表を見ればその理由が分かるはずです。
早速、 ASCII コードをチェック!
そうです!
文字として入力した「 1 」に対応する ASCII コードが「 49 」だったのです。
49 が出力される謎が解けたところで、前回出題された問題を振り返ってみましょう。
【問題】 char 型で定義した変数 num にある整数を代入し、 printf ( “ %d ” ); で出力せよ。
ただし、出力した値と入力した値が同じになるようにする。
※ヒント: num から ‘ 0 ’ を引く。
前回と今回のブログを読んだ人なら、この問題の答えが分かるかもしれないですね。
相変わらずよく分からない人も大丈夫!一緒に考えましょう (^▽^)/
ですが今回はここまで!
次回のブログでは遂にこの問題に挑みます!お見逃しなく (@_@)
まとめ
getchar( ) で入力したものをprintf ( “ %d ” ); で出力すると、 そのASCII コードが 10 進数で表示される。
ぐぅのつぶやき
ASCII コードはビットの世界では欠かすことのできない大切なものだったんだなぁ。
次回への架け橋
「ヒント: num から ‘ 0 ’ を引く」の意味を考えてみよう!
おまけ
ASCIIコード表には10進数表示以外にも16進数表示のASCIIコードも載っています。
ビットの世界では16進数表示が主流なので、こちらもチェックしておくといいですね。
「 ASCII コードの実態」シリーズ をまとめてチェック!!
ASCII コードの事態【その 1 】~ 1 なのに 49 ? 入出力形式 ~
1を出力しようとしたら49になってしまった!?その原因を探っていくと、ASCIIコードと関係が…。
ASCII コードの事態【その 2 】~ ASCII コードと文字の対応 ~
1が49になってしまった謎に迫ります!
ASCII コードの事態【その 3 】~ num から‘ 0 ’を引く? ~
遂に「num から‘0’を引く」の意味が明らかになります!!