はじめに

こんにちは。ぐぅ です。
とうとう 「ASCII コードの実態」 も今回で最終回です。
今回は、「【その 1】 ~ 1 なのに 49 ? 入出力形式 ~」 で出題された問題に挑戦したいと思います!

【問題】
 char 型で定義した変数 num にある整数を代入し、 printf ( “ %d ” ); で出力せよ。
 ただし、出力した値と入力した値が同じになるようにする。
 ※ ヒント: num から ‘ 0 ’ を引く。

【その 1】 ~ 1 なのに 49 ? 入出力形式 ~」 と 
【その 2】 ~ ASCII コードと文字の対応 ~」 で勉強したように、
「 1 」 を入力した場合、ただ単に printf ( “ %d ” ); で出力すると 「 49 」 が表示されます。

これは getchar() で入力した 「 1 」 を printf ( “ %d ” ); で出力すると、
「 1 」 に対応する ASCII コード( 49 )が出力されることが原因でした。

では 「 1 」 を入力して 「 1 」 を出力するにはどうしたらいいのでしょうか?
ポイントは ASCII コードと問題のヒントです。

解説

「 num (今は 1 )から ‘ 0 ’ を引く」
普通に考えたら、ある数字から 0 を引いても値は変わらないですよね。

しかし今回の問題で扱っているのは 「文字として」 入力された数字です。
つまり … ASCII コードに変換されているということです。

では早速、 ASCII コード表をチェックしてみましょう!

ASCII コード表を見ると分かるように、
ASCII コードは文字や数字、記号に順番に当てはめられています。

例えば「 0 から 1 」、「 1 から 2 」と文字が 1 ずつ大きくなると、それに対応する ASCII コードも 1 ずつ大きくなります。

なので、 1 の ASCII コード( 49 )から 0 の ASCII コード( 48 )を引いたら 「 1 」 となります。
このようにすることで、printf (“ %d ”) で出力しても、入力した値と同じ値を出力することができます。

これを踏まえてコードを修正すると…

では早速、実行してみましょう!

やったー!
遂に 「 1 」 が出力されました \(^○^)/

ここでもう 1 つ注目です!
コードをよく見ると 「 0 」 に 「 ‘ ’ 」 が付いているのが分かると思います。
これは飾りではありません!

num から 0 を引くとき、その 「 0 」 は ASCII コードでなければいけません。
「 0 」 を ASCII コードとして認識させるために 「 ‘ ’ 」 が必要なのです!

まとめ

ASCII コードは順番に並んでいるため、 num から ‘ 0 ’ を引くことで入力値と出力値を一致させることができる。

■ ぐぅのつぶやき

1 つの問題からたくさんのことを学ぶことができたなぁ~。
忘れないようにしっかり復習しよう!

 

 

「ASCII コードの実態」 シリーズ をまとめてチェック!!

 ・ ASCII コードの実態 【その 1】 ~ 1 なのに 49 ? 入出力形式 ~
   1 を出力しようとしたら 49 になってしまった!? その原因を探っていくと、ASCII コードと関係が…。

 ・ ASCII コードの実態 【その 2】 ~ ASCII コードと文字の対応 ~
   1 が 49 になってしまった謎に迫ります!

 ・ ASCII コードの実態 【その 3】 ~ num から‘ 0 ’ を引く? ~
   遂に 「num から ‘0’ を引く」 の意味が明らかになります!!