Cooporate and Make it a Success!😊

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

int型、char型の形式、どちらの形式でメモリに格納されているにかかわらず


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;

}


プログラムの実行結果




char型の変数aに数値データ109を代入しているので


109は


1バイトのメモリに


01101101


と格納されています


ですが


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


のように


printfの引数として


aが渡されると


データ処理の関係から


109は


4バイトのメモリに


00000000 00000000 00000000 01101101


と格納し直されます


つまり


int型の形式(4バイト)で格納し直されることになります





つづいて


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型の形式(32ビット)でメモリに格納されています



ソーラー「なるほどぉ


とにかく


数値データ

109


%c出力変換指定子をつかって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







char型の変数aに文字データ'm'を代入すると



1バイトのメモリに


01101101(数値データ109)


が格納されることになります


ですが


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


のように


printfの引数として


aが渡されると


データ処理の関係から


01101101(109)



4バイトのメモリに


00000000 00000000 00000000 01101101


と格納し直されます


つまり


int型の形式(32ビット)で格納し直されることになります



さらに


文字データ'm'を直接


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


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


#include <stdio.h>


int main()

{


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


return 0;

}


プログラムの実行結果


109



→このプログラムの実行結果をみていただいても


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


109が表示されます。


このときも


文字データ'm'自体は


まず


1バイトのメモリに


01101101(数値データ109)


と格納されるのですが


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


のように


printfの引数として


文字データ'm'が渡されると


データ処理の関係から


01101101(数値データ109)



4バイトのメモリに


00000000 00000000 00000000 01101101


と格納し直されます


つまり


int型の形式(32ビット)で格納し直されることになります」



ソーラー「そっか


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


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


数値データ109(数値データ109を格納した変数)をprintf出力表示すると


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


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


この場合の


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


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


(アスキーコードとは


文字の画像データに割り振られた番号のことで


その番号を用いて


コンピュータは文字の画像データをよびだしています)


逆に


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


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


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


そう


今の場合は


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


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


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


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


  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る