変数宣言char b; によって作製された変数bは-128から127までの数値データの1つを格納できますが cout <<b;により出力表示されるデータは数値データでなく文字データとなります

ソーラー「さあ😊


では、次のプログラムはどうかな


#include <iostream>


using namespace std;


int main() {


char b;

b=97;


cout <<b<<"\n";


return 0;

}


プログラムの実行結果


a


マックス「?????


なんだ このプログラムの実行結果は???


なんで


char型の変数bに😊97😊を格納して


cout <<b<<"\n";


を実行すると


aがコマンドプロンプト画面に出力表示されてるんだ?


why?


前のエピソードでもみてきたように


char型の変数bに


文字データ'a'


char b;

b='a';


格納されてから


cout <<b<<"\n";


により


ビルド実行結果


a


が表示されるというなら


まあ、わかるけどなあ


なあ


ソーラーよ


どういう仕組みなんだ これ?」


ソーラー「char型の変数宣言


char b;


により作成された変数bには


シングルクォーテーション'  'で囲まれた


文字データ

'a'


b='a';


のように格納することができます


(この場合


半角英数字1文字分の


文字データ

'a'に対応する01100001が


char型の変数bの管理している8ビットのメモリに格納されることになります)


さらに


char型の変数bには


char b;

b=1;


char b;

b=127;


のように


-128から127までの


整数値データを格納することができる機能があります


ですから


char b;

b=97;


記述してあるのは正しいのです。」


マックス「え?そうなの?


素敵な回答 ありがとう」


ソーラー「char型の形式では


00000000から11111111までの


256通りの8ビットデータ


の1つをメモリに格納できます


このとき

char型の形式で


メモリに01100001が格納されているとします


文字aの画像データには01100001が割り振られているので


01100001(97)をもちいれば


文字aをコマンドプロンプト画面に表示することができますが


01100001(97)をもちいて


そのまま


97をコマンドプロンプト画面に表示することもできるんです



char型の形式では


8ビットのメモリに


'a'

'1'

などの


文字データに付けられた番号


'a'に対応する01100001

'1'に対応する00110001


つまり


a という画像データに付けられた番号01100001

1という画像データに付けられた番号00110001


を格納できます


そのほかに


メモリに


1

2

などの


整数値データを

普通に


1なら00000001

2なら00000010


と格納することもできるんです


もうちょっといいかえると


char型の形式でデータを格納する変数b




        🌞char型の変数b🌞



には


'a'

'1'

などの文字データを代入できます


それはつまり


変数bの管理している8ビットのメモリに

'a'

'1'

などの文字データに対応する


'a'に対応する01100001

'1'に対応する00110001


つまり


a という画像データに割り振られた番号01100001

1という画像データに付けられた番号00110001


を格納できるということなのです



さらに



char型の形式でデータを格納する変数




        🌞char型の変数🌞



には


数値データ

1

2


を代入することができます


それはつまり


変数bの管理している8ビットのメモリに


1に対応する00000001

2に対応する00000010



格納することができるということなのです」



マックス「


char型の変数は-128から127までの


整数値データを格納できるんだったよな・・・


う。うん・・・?


char型の変数は-128から127までの


数値データを格納できるとはど~いうことか?



おおお


あ、わかった


bはchar型の変数なんだろう


ということは


その変数bは


char型なので


8ビットのメモリの容量をもつんだろう


8ビットのメモリの


お部屋□□□□□□□□


には


00000000から11111111までの


256通りの


0と1のパターンのうちの1つを格納できる。


うむうむ


そして

10進数0を


char型の変数bに

格納したときは


00000000がメモリに格納される\(^o^)/」


ソーラー「そして

\(^o^)/

10進数1を

char型の変数bに

格納したときは

00000001がメモリに格納されます。


そして

10進数2を

char型の変数bに

格納したときは

00000010がメモリに格納されます。


そして

10進数3を

char型の変数bに

格納したときは

00000011がメモリに格納されます。

そして

10進数126を

char型の変数bに

格納したときは

01111110がメモリに格納されます。


そして

10進数127を

char型の変数bに

格納したときは

01111111がメモリに格納されます。


そして

10進数-128を

char型の変数bに

格納したときは

10000000がメモリに格納されます。


そして

10進数-127を

char型の変数bに

格納したときは

10000001がメモリに格納されます。


そして

10進数-126を

char型の変数bに

格納したときは

10000010がメモリに格納されます。

そして

10進数-2を

char型の変数bに

格納したときは

11111110がメモリに格納されます。


そして

10進数-1を

char型の変数bに

格納したときは

11111111がメモリに格納されます。


このようにして


char型の変数bには


-128から127までの数値データを


格納できるんです」


マックス「


そう


つまり


char b;

b=97;



char型の変数に97を格納した場合


cout<<b<<\n;


が実行されると


コマンドプロンプト画面に


🍓a🍓🍓


が出力表示された。


ここで


char型の変数bに97が格納されるということは


8ビットのメモリに


(97を2進数を用いて表した)


01100001が格納されるということだろ


そして


01100001は


aの画像データに割り振られた番号であり


aの画像データをよびだすための番号になっているというわけだ


この変数bに97(0110001)が格納された状態で


cout<<b<<\n;


が実行されると


その

01100001

を利用して


aの画像データをよびだし


aが


コマンドプロンプト画面に表示されるというわけだ(^_^)/


じゃあ


今度は


数値データ98(0110010)を


char型の変数bに格納して


cout <<b<<"\n";


を実行すると


何がコマンドプロンプト画面に表示されるか


ためしてみるかな


どうだ!」



#include <iostream>


using namespace std;


int main() {


char b;

b=98;


cout <<b<<"\n";


return 0;

}


プログラムの実行結果

b


マックス「おお


97(0110001)をchar型の変数bに格納したときは



aが表示され


98(0110010)をchar型の変数bに格納したときは


bが表示される・・・


なんか


数値97,98の番号順に対応して


アルファベットがa,bと表示されてないか?」





ソーラー「ウィ~


そうなんです


99(0110011)をchar型の変数bに格納したときは


cout <<b<<"\n";


が実行されると


cが表示され


100(0110100)をchar型の変数bに格納したときは


cout <<b<<"\n";

が実行されると


dが表示されます。」




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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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