Version 4.03
トランジスタスイッチ
「前回はメモリの中を見たけど、今回はさらにその中を見ましょう」
『ってゆーか、そーゆーのって意味あんの?』
「残念ながら、必須なんだよね。こういう細かいこと知ってないと使えない
のが、 C++ 言語」
『ふーん』
「さて、前回 char 型の変数はメモリの1マス分、16進数だと2桁分だっ
てとこまで言いました」
『言われました』
「でも、メモリの中に実際に16進数の数字が入っているわけじゃないんで
す」
『じゃー10進数』
「も入ってません」
『じゃー何が入ってるの?』
「その前に!」
『そのまえに?』
「この前みたいに〈メモリの中身〉は見れたけど、そのさらに奥、つまりメ
モリの1マスに何が入ってるかは、直接見れないから」
『そんな細かいのは見れないのね』
「だから、なんとかイメージ膨らませてみてね。間接的には見られるし」
『よーするに水希ちゃんの解説に頼れってことよね』
「うーん、そーゆーわけじゃないんだけど……ま、とりあえず話を進めてみ
ましょう」
『うん、進めて進めて』
「では質問。メモリの中には何が入ってるんでしょう」
『……小人さん?』
「なんでやねん」
『そういえば、数字とか保存できるんだもんねぇ、なんか入ってるのよね』
「実は、〈スイッチ〉が入ってます」
『スイッチ?』
「そう。オンとオフになるスイッチ」
『ウソだぁ、あのでっかいのが入ってるの?』
「いや、ああいう機械式のじゃないスイッチ。正確には〈トランジスタ〉っ
てもの」
『あ、トランジスタラジオとか聞いたことあるね』
「トランジスタは極小のスイッチ。2000年の CPU やメモリなら、だい
たい何百万〜何千万って数が入ってます」
『な、何百万!? あのさ、テレビとかで CPU の中身とか見たことあるけ
ど、あれってものすごくちっこいよねぇ、あんなかに』
「何百万」
『ほー』
「このトランジスタひとつひとつが、スイッチとして働いてます」
『働いて、どうなるの?』
「ここからが大事。あるトランジスタスイッチがあります。これは、オンと
オフになります」
『うんなるね』
「このスイッチがふたつありました。さて〈スイッチが入っているかいない
か〉は、何通りの組み合わせがある?」
『ええっと……』
オフ・オフ
オフ・おん
おん・オフ
おん・おん
『だーね。だから4通り!』
「じゃあスイッチが3つだったら?」
『げ! なんかそれって数学っぽくない?』
「数学ってほどじゃないけど……今の4通りが、加えたスイッチがオフの時
とオンの時の2通りあるわけだから、加えたスイッチを一番左に書くと……」
オフ・オフ・オフ
オフ・オフ・おん
オフ・おん・オフ
オフ・おん・おん
おん・オフ・オフ
おん・オフ・おん
おん・おん・オフ
おん・おん・おん
『あ、8とおり!』
「ってことはスイッチが4つだったら」
『えっと、これがまた、オンとオフ2通りあるんだから……2ずつかけてい
けばいいってことだから、16通りだね。……あ、これって16進数のこ
と!?』
「そゆこと。前回見たメモリの1マスのうち、16進数1桁分を、トランジ
スタスイッチ4つで表してるんです」
『?? つまりどゆこと?』
「スイッチ4つで16通り表せるでしょ」
『うん、表せる』
「そこで、それぞれに〈数字〉を割り当てたわけ。例えば」
オフ・おん・オフ・おん
「なら 5 って数字と見なす、って」
『みなすってどーゆーことよ』
「例えばバーコード」
『ばーこーど?』
「あのしましまが、商品の値段を表しているでしょ。これが〈見なす〉。あ
のテキトーなしましまを、レジは〈特定の値段〉とみなすから、あれが数字
になる」
『つまり、あたしがこれを数字と見なさなきゃいけないってこと?』
「火美ちゃんがじゃなくて、コンピューターが。実際にメモリ見たり、変数
の中身を出力したときは、数字として表れてたでしょ」
『あ、ってことは、メモリの中はこんなわけ分かんないのだけど、コンピュー
ターはそれ読んで、数字に直してくれるってことなんだ!』
「そゆこと。メモリの中はこーゆーおんとオフしかないんだけど、それを特
定の規則にのっとって〈数字に置き換えて表示する〉ってこと」
『ほー』
「この〈見なす〉っていうのはとーっても大事だから。これから何度も〈見
なす〉ことが出てくるから」
『なんか難しそう……』
「頭の体操っぽいけどね。例えば!」
void TestHex()
{
int i;
i = 15;
TRACE( "%d\n", i ); // 15
i = 0xF;
TRACE( "%d\n", i ); // 15
}
『えーっと、数字入れる変数 i を作って、それに 15 入れて、表示して、
そのあと 0xF ……16進数で F は 15 、あ、同じ数字だね、これ入れて、
表示して、同じ結果。ってこれが?』
「 i に 15 と 0xF 入れてるけど、これはどっちも同じことだからね」
『どゆこと?』
「どっちも、結局はオンとオフってこと」
『あ、スイッチに置き換えられちゃってるんだ』
「どっちの形式で入れても、 i の中身は同じ。スイッチのオンオフだから」
『よーするに表現の違いってことね』
「そう、それが大事。例えば
void TestHex2()
{
int i;
i = 15;
TRACE( "%X\n", i ); // F
i = 0xF;
TRACE( "%X\n", i ); // F
}
『 %X って確か16進数で表示するのだよね。あ、だから F なんだ』
「つまり、 i のスイッチのオンオフを、 %d なら〈整数と見なして表示〉、
%X なら〈16進数と見なして表示〉するってこと」
『あ、これってつまり〈解釈の仕方〉ってゆーか〈変換の仕方〉ってゆーか、
そういうのなんだ』
「これがさっき言った〈数字として見なす〉って部分。コンピューターは、
メモリは〈スイッチの集まり〉としか見えないから」
『つまりオンオフだけってことね。プログラムの方で〈これを16進数とし
て表示しろ!〉って言わないと、16進数になんないわけだ』
「そういうこと。なんとなくイメージ掴めてきた?」
『なんとなく。ってことはさ』
i = 15;
『のとこは、 15 がスイッチのに変換されてから、 i の中に入るってこと
なんだ』
「うーん、それはちょっと違うんだよね。 Ver 1.0 ( No.003 ) を思い出し
てみて」
『うわ、1年前! えーっと、確かファイルをバイナリーモードっていうの
で……あ、なんか今やってるとことすごく似てる!』
「メモリがスイッチの集まりってことは、この 15 も、今表示されている文
章も、コンピューター上のすべてはそのスイッチのオンオフで格納されてる
ってこと」
『ってことは、ここで見えている 15 っていうのは見せかけなんだ』
「そういうこと。これはプログラム全体に言えるかな」
『どゆこと?』
「このプログラムは C++ 言語ってプログラミング言語で書かれてるんだけ
ど、それはこの〈スイッチのオンオフ〉とは違うでしょ」
『全然違う。ってことはスイッチのオンオフに変換する必要がある?』
「そう、それが〈ビルド〉をするってこと」
『そのためにビルドって必要だったんだ!』
「ビルドする事で、このプログラムがスイッチバージョンに書き換えられる」
『 15 もスイッチのオンオフになるわけね』
「そういうこと。だから〈 15 がスイッチのに変換され〉るのは、実行する
ときじゃなくて、ビルドする時ってことだね」
『ひゃー、なんか違う世界って感じだね』
「違う世界でしょ。コンピューターの中の仕組みはかなり特殊。それをうま
くごまかしているから、特殊に見えないってこと」
『ってゆーか、ここまでしないと見えないもんねぇ。ってゆーか、見ないと
プログラムって組めないもんなんだ』
「特に C++ 言語はね」
『この前もそれ言ったね』
「 C++ 言語はこういうことができないと使いこなせないから。まずは、こ
の〈スイッチのイメージ〉を頭に焼き付けて」
『んーと、メモリの中にスイッチがいっぱい……』
「スイッチ4つで16進数ひとけた分」
『ってことはスイッチ8個で char ひとつ分』
「それがずらーっと並んでる」
『スイッチ8個1セットがずらっと並んでる……』
「コンピューターの中はそんなのばっか」
『ばっか!』
……・おん・おん・オフ・おん・オフ・オフ・オフ・おん・おん・オフ……
「このイメージをしっかり叩き込んでおけば、結構何とかなるかな」
/*
Preview Next Story!
*/
『コンピューターの中身って全部こんな感じなんだ』
「そう、メモリもディスクも CPU も」
『……ってことは、あたし自身も!?』
「そういえばそんな設定あったね、はは」
『はは、じゃねーっ!』
「というわけで次回」
< Version 4.04 2進数 >
『につづく!』
「火美ちゃん、アイディンティティー崩壊の危機!?」
『ってゆーかそーゆーストーリー系全然ないよね』
「解説で手一杯だからねぇ」
『あたしに人権はないのね……』