Cooporate and Make it a Success!

int型、char型に格納されているにかかわらず数値を%c出力変換指定子をつかってprintf出力表示すると文字の画像データ(文字)がコマンドプロンプト画面に表示されます

int型、char型に格納されているにかかわらず


数値を%c出力変換指定子をつかってprintf出力表示すると


文字の画像データ(文字)がコマンドプロンプト画面に表示されます


char型の変数aに数値109を代入し


%c出力変換指定子をつかって変数aをprintf出力表示すると


#include<stdio.h>


int main(void)

{

char a = 109;


printf("%c\n", a);


return 0;

}

コンパイル結果


つづいて


int型の変数aに数値109を代入し


%c出力変換指定子をつかって変数aをprintf出力表示すると



#include<stdio.h>


int main(void)

{

int a = 109;


printf("%c\n", a);


return 0;

}


コンパイル結果


m


さらに


数値109を直接


printf関数の第2引数に代入し


%c出力変換指定子をつかって109を直接printf出力表示しても


#include<stdio.h>


int main(void)

{


printf("%c\n", 109);


return 0;

}


コンパイル結果


m


となります


数値109を直接


printf関数の第2引数に代入したときの数値109は


自動的にint型の形式でメモリに格納されています



ソーラー「なるほどぉ


とにかく


数値

109

をprintf出力表示すると


文字mが表示されるんだね」



逆に


mをコンパイラに文字データとして認識させるために


シングルクオーテーション''で囲んだ


文字データ'm'をchar型の変数aに格納代入し


%d出力変換指定子をつかって変数aをprintf出力表示すると


109が表示されます。


#include <stdio.h>


int main()

{


char a = 'm';

printf("%d\n", a);


return 0;

}


コンパイル結果


109


さらに


文字データ'm'を直接


printf関数の第2引数に格納し


%d出力変換指定子をつかって文字データ'm'を直接printf出力表示しても→


#include <stdio.h>


int main()

{


printf("%d\n", 'm');


return 0;

}


コンパイル結果


109



→このコンパイル結果をみていただいても


おわかりになられますように


109が表示されます。


このときの文字データ'm'は自動的に


char型に格納されています。」


ソーラー「そっか


いままでのことをまとめると


%c出力変換指定子をつかって


数値をprintf出力表示すると


文字(文字の画像データ)が


コマンドプロンプト画面に表示されるんだね。


この場合の


109は文字の画像データmに割り振られた


アスキーコードとなってるんだ。


逆に


その文字のアスキーコードが知りたければ


%d出力変換指定子をつかって


その文字データをprintf出力表示すると、


そう


今の場合は


文字データ'm'でしたね。


その文字データに対応する


アスキーコード(数値)109が


コマンドプロンプト画面に表示されるんだね。」