僕:数学が好きな高校生。
ユーリ:僕のいとこの中学生。僕のことを《お兄ちゃん》と呼ぶ。
テトラちゃん:僕の後輩。好奇心旺盛な《元気少女》。
ミルカさん:数学が好きな高校生。僕のクラスメート。長い黒髪の《饒舌才媛》。
リサ:自在にプログラミングを行う無口な女子。赤い髪の《コンピュータ少女》。
駅にて
テトラ「おはようございます、ユーリちゃん。……あれ? 先輩は?」
ユーリ「お兄ちゃん、インフルエンザになっちゃった! だから、双倉図書館(ならびくらとしょかん)の 《変幻ピクセル》イベントには行けないって」
テトラ「ええっ! それじゃ、お見舞いに行かなくては!」
ユーリ「インフルうつるからだめだよー、テトラさん。双倉図書館、二人でいっしょに行こ!」
テトラ「そう……ですね」
えっと、あの、ど、読者のみなさま、よろしくお願いします(ぺこり)。
今日はみんなで電車に乗って、 双倉図書館のイベントに参加しようという予定でしたが、 先輩がいらっしゃらないようです。ちょっと、残念……かな。
ユーリ「双倉図書館に行くの、すごく久しぶり!」
テトラ「そうですね。今日の《変幻ピクセル》イベントは、コンピュータの中の $2$ 進数の話らしいですよ。 いろんな展示物があって、楽しそうです」
ユーリ「テトラさんは、コンピュータのこと詳しーの? プログラムとか書ける?」
テトラ「いえいえ、詳しくはありません。興味はあるので、少し勉強していますけど。 リサちゃんは詳しいですよね」
ユーリ「リサさん、こないだ会ったよ! あんまりしゃべらないよね」
テトラ「そうですね。今日の《変幻ピクセル》イベントでは、リサさんがナビゲートしてくれるはずですけど……」
双倉図書館にて
ユーリ「そーいえば、今日はミルカさまは? 会場のどこか回ってるの?」
リサ「インフルエンザ」
ユーリ「へー、すごい偶然。流行ってるんだねー。うちのお兄ちゃんもだよ」
リサ「……」
テトラ「……」
リサ「順路はこの部屋から」
ユーリ「早く入ろ!」
テトラ「ちょっ、ちょっと待ってください……」
リサ「スキャナとプリンタ」
ユーリ「紙がはさまってるよ」
テトラ「scannerは紙をscanする機械で、printerは紙にprintする機械ですね。スキャナは読み取りで、プリンタは印刷でしょうか」
リサ「壁に解説パネル」
- 赤い機械はスキャナです。紙に書かれた絵を読み込む機械です。
- スキャナは、読み込んだ白黒の情報を数に変換してプリンタに送信します。
- 青い機械はプリンタです。紙に絵を印刷する機械です。
- プリンタは、受信した数を白黒の情報に変換して書き込みます。
ユーリ「ふーん」
リサ「全体図」
ユーリ「あ、そゆこと? スキャナで絵を読んで、プリンタが印刷するの?」
テトラ「でも、すごく小さいですよね」
リサ「最小実験キット」
テトラ「?」
リサ「 $1$ 行 $16$ ビット」
ユーリ「よくわかんない」
スキャナの仕組み
- スキャナには $16$ 個の受光器が並んでいます。
- それぞれの受光器は《白は $0$ 》《黒は $1$ 》という $1$ ビットの情報を読み取ります。
- 一度に $16$ ビットの情報を読み、 $2$ 進法で $1$ 個の数に変換します。
- スキャナは $16$ ビット読み取るごとに、その数を送信します。
ユーリ「ふーん……ここに書いてる《 $2$ 進法で $1$ 個の数に変換》って?」
テトラ「きっと、こういうことですよ。 $16$ 個の受光器が読み取った $s_{15},s_{14},\ldots,s_{1},s_{0}$ という $16$ ビットがありますよね。 あ、 $1$ ビットは $0$ か $1$ かのどちらかなんですけど、 その $16$ ビットを使って、こんな計算をするんです」
$$ 2^{15}s_{15} + 2^{14}s_{14} + \cdots + 2^{1}s_{1} + 2^{0}s_{0} $$ユーリ「あ、わかったわかった。 $2$ 進法だもんね!」
リサ「 $(s_{15}s_{14}\cdots s_{1}s_{0})_2$ 」
テトラ「たとえば、$(0000 0000 0000 0101)_2$ならこうなりますね」
$$ ( 0000 0000 0000 0101 )_2 = 2^2+2^0 = 4 + 1 = 5 $$リサ「確認クイズ」
スキャナは $16$ ビットの情報を読み、 以下のように $2$ 進法で $1$ 個の数に変換します。
$$ (s_{15}s_{14}\cdots s_{1}s_{0})_2 = 2^{15}s_{15} + 2^{14}s_{14} + \cdots + 2^{1}s_{1} + 2^{0}s_{0} $$
では、この数は何通りあるでしょうか。
ユーリ「 $16$ 通り……じゃない!じゃない! $(0000 0000 0000 0000)_2$ から $(1111 1111 1111 1111)_2$までだから……」
テトラ「 $s_{15}$ が $0$ か $1$ かの $2$ 通り、 そのそれぞれに対して $s_{14}$ が $0$ か $1$ かの $2$ 通り、 そのそれぞれに対して $s_{13}$ が $0$ か $1$ かの $2$ 通り、 ……ずっと続いて最後に、 そのそれぞれに対して $s_{0}$ が $0$ か $1$ かの $2$ 通りですね。 全部で $2$ の……何乗でしょう」
ユーリ「 $2$ の $16$ 乗かにゃ?」
$$ \underbrace{2 \times 2 \times \cdots \times 2}_{\text{ $16$ 個の $2$ }} = 2^{16} = 65536 $$リサ「 $65536$ 通り」
スキャナは $16$ ビットの情報を読み、 以下のように $2$ 進法で $1$ 個の数に変換します。
$$ (s_{15}s_{14}\cdots_{1}s_{0})_2 = 2^{15}s_{15} + 2^{14}s_{14} + \cdots + 2^{1}s_{1} + 2^{0}s_{0} $$
この数は、 $2^{16} = 65536$ 通りあります。
$$ \begin{array}{rr} 0 & 0000 0000 0000 0000 \\ 1 & 0000 0000 0000 0001 \\ 2 & 0000 0000 0000 0010 \\ 3 & 0000 0000 0000 0011 \\ \vdots& \vdots \\ 65532 & 1111 1111 1111 1100 \\ 65533 & 1111 1111 1111 1101 \\ 65534 & 1111 1111 1111 1110 \\ 65535 & 1111 1111 1111 1111 \\ \end{array} $$
ユーリ「 $6$ 万 $5$ 千 $5$ 百 $3$ 十 $6$ 通りもあんの!?」
リサ「それで $1$ 行分」
ユーリ「 $1$ 行分って?」
リサ「 $16$ 行分繰り返して $1$ 枚の絵を送る」
テトラ「 $\textit{S5}$ 行で $1$ 行分の $16$ ビットを読んで、 $\textit{S6}$ 行でその数 $s$ をプリンタに送信するということですね。 それを、 $k = 0$ から $k = 15$ までの $16$ 回繰り返す……」
プリンタの仕組み
ユーリ「プリンタもおんなじ感じ?」
テトラ「プリンタは、ちょうど逆になるわけですよね。 $0$ は白で、 $1$ は黒に」
リサ「 $0$ は印字無し」
- プリンタは $16$ ビットの数を受信することができます。
- プリンタには $16$ 個の印字装置が並んでいます。
- それぞれの印字装置に $1$ ビットの情報を与えると《 $0$ は印字無し》《 $1$ は■を印字》という処理を行います。
テトラ「あ、白い紙に印字するので、 $0$ は何もしないんですね」
リサ「プログラム」
テトラ「先ほどのSCANNER-SCANと、このPRINTER-PRINTは、やっていることは違うけれど、繰り返すところはよく似ていますね」
実行してみよう
ユーリ「ねー、リサさん。だいたいわかったから、やってみよーよ!」
リサ「《さん》は不要。入力のPaper 1はこれ」(咳)
ユーリ「あ、さっきのお化けの絵じゃないんだ」
テトラ「Fですか……どうしてFなんでしょう」
ユーリ「この紙をスキャナに入れればいーんだよね! ユーリやる!」
リサ「プリンタに白紙を」
ユーリ「できたー! って、これじゃコピー機だね。同じだもん」
※左がスキャナに入れた紙、右がプリンタで印字された紙。
リサ「フィルタを入れてないから」
ユーリ「フィルタって?」
この連載について
数学ガールの秘密ノート
数学青春物語「数学ガール」の中高生たちが数学トークをする楽しい読み物です。中学生や高校生の数学を題材に、 数学のおもしろさと学ぶよろこびを味わいましょう。本シリーズはすでに14巻以上も書籍化されている大人気連載です。 (毎週金曜日更新)