🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
変数宣言char b; によって作製された変数bは-128から127までの数値データの1つを格納できますが cout <<b;により出力表示されるデータは数値データでなく文字データとなります
変数宣言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;
が実行されると
コマンドプロンプト画面に
🍓
が出力表示された。
ここで
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が表示されます。」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます