コンピュータの中央処理装置と入出力装置の間における情報のやり取りは、
ほとんどが文字を使った情報で行われます。
標準出力(stdout)への出力先も例外ではありません。
つまり、標準出力のコンソールは文字コードの番号を受け取ると、
その番号に対応する文字を出すように作られているのです。
その仕組みに合わせるため、printfの %d による出力指示は、出力する引数のデータを10進になる文字コードの並びに変換し、
それから、変換した文字コードを順番に出力する仕組みになっているのです。
例えば、123 の値を%d で出力すると言うことは、
1の文字コード、2の文字コードと、3の文字コードと順番に出力することを意味します。
(16進数で表現すると、1の文字のASCIIコードの0x31と、2の文字のASCIIコードの0x32と、
3の文字のASCIIコードの0x33です。)
そして、このデータをコンソールで受け取ると、その順番で123 と表示する訳です。
さて、printfには %c の指定があります。これは引数のデータを変換なしで、 その値を単純に出力する指示になっています。以下に例を示します。
printf("%c",0x31); printf("%c",0x32); printf("%c",0x33); |
123 |
コンソールは、受け取った番号に対応する文字をを順番に画面へ出すので、123と出ています。