この記事は『数学ガールの秘密ノート/ビットとバイナリー』として書籍化されています。
登場人物紹介
僕:数学が好きな高校生。
ユーリ:僕のいとこの中学生。僕のことを《お兄ちゃん》と呼ぶ。
テトラちゃん:僕の後輩。好奇心旺盛な《元気少女》。
ミルカさん:数学が好きな高校生。僕のクラスメート。長い黒髪の《饒舌才媛》。
リサ:自在にプログラミングを行う無口な女子。赤い髪の《コンピュータ少女》。
テトラ「おはようございます、ユーリちゃん。……あれ? 先輩は?」
ユーリ「お兄ちゃん、インフルエンザになっちゃった! だから、 双倉図書館(ならびくらとしょかん)の 《変幻ピクセル》イベントには行けないって」
テトラ「ええっ! それじゃ、お見舞いに行かなくては!」
ユーリ「インフルうつるからだめだよー、テトラさん。 双倉図書館、二人でいっしょに行こ!」
テトラ「そう……ですね」
ということで、本日の語り部はあたし、テトラということになりました。
えっと、あの、ど、読者のみなさま、よろしくお願いします(ぺこり)。
今日はみんなで電車に乗って、 双倉図書館のイベントに参加しようという予定でしたが、 先輩がいらっしゃらないようです。ちょっと、残念……かな。
ユーリ「双倉図書館に行くの、すごく久しぶり!」
テトラ「そうですね。今日の《変幻ピクセル》イベントは、 コンピュータの中の $2$ 進数の話らしいですよ。 いろんな展示物があって、楽しそうです」
ユーリ「テトラさんは、コンピュータのこと詳しーの? プログラムとか書ける?」
テトラ「いえいえ、詳しくはありません。 興味はあるので、少し勉強していますけど。 リサちゃんは詳しいですよね」
ユーリ「リサさん、こないだ会ったよ! あんまりしゃべらないよね」
テトラ「そうですね。今日の《変幻ピクセル》イベントでは、 リサさんがナビゲートしてくれるはずですけど……」
あたしたちは双倉図書館に到着すると、リサちゃんと合流して、 会場になった部屋を回っていくことにしました。
ユーリ「そーいえば、今日はミルカさまは? 会場のどこか回ってるの?」
リサ「インフルエンザ」
ユーリ「へー、すごい偶然。流行ってるんだねー。うちのお兄ちゃんもだよ」
リサ「……」
テトラ「……」
リサ「順路はこの部屋から」
ユーリ「早く入ろ!」
テトラ「ちょっ、ちょっと待ってください……」
あたしたちが部屋に入ると、機械が二台並んでいました。 一台は赤、もう一台は青、 どちらも手のひらくらいの大きさです。
リサ「スキャナとプリンタ」
スキャナ(Scanner)とプリンタ(Printer)
ユーリ「紙がはさまってるよ」
テトラ「scannerは紙をscanする機械で、printerは紙にprintする機械ですね。 スキャナは読み取りで、プリンタは印刷でしょうか」
リサ「壁に解説パネル」
解説パネル(概要)
ユーリ「ふーん」
リサ「全体図」
解説パネル(全体図)
ユーリ「あ、そゆこと? スキャナで絵を読んで、プリンタが印刷するの?」
テトラ「でも、すごく小さいですよね」
リサ「最小実験キット」
テトラ「?」
リサ「$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}_{\REMTEXT{$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$ は印字無し」
解説パネル(プリンタ)
テトラ「あ、白い紙に印字するので、 $0$ は何もしないんですね」
リサ「プログラム」
テトラ「先ほどのSCANNER-SCANと、このPRINTER-PRINTは、 やっていることは違うけれど、繰り返すところはよく似ていますね」
ユーリ「ねー、リサさん。だいたいわかったから、やってみよーよ!」
リサ「《さん》は不要。入力のPaper 1はこれ」(咳)
Paper 1(入力)
ユーリ「あ、さっきのお化けの絵じゃないんだ」
テトラ「Fですか……どうしてFなんでしょう」
ユーリ「この紙をスキャナに入れればいーんだよね! ユーリやる!」
リサ「プリンタに白紙を」
あたしたちは、 プリンタにPaper 2として白紙を入れ、先ほどのPaper 1をスキャナに入れました。 すると、スキャナとプリンタが動きだし、無事に印字が終了しました。
ユーリ「できたー! って、これじゃコピー機だね。同じだもん」
スキャナとプリンタを接続して動かした
※左がスキャナに入れた紙、右がプリンタで印字された紙。
リサ「フィルタを入れてないから」
ユーリ「フィルタって?」
無料で「試し読み」できるのはここまでです。 この続きをお読みになるには「読み放題プラン」へのご参加が必要です。
ひと月500円で「読み放題プラン」へご参加いただきますと、 434本すべての記事が読み放題になりますので、 ぜひ、ご参加ください。
参加済みの方/すぐに参加したい方はこちら
結城浩のメンバーシップで参加 結城浩のpixivFANBOXで参加(2015年1月23日)
この記事は『数学ガールの秘密ノート/ビットとバイナリー』として書籍化されています。
書籍化にあたっては、加筆修正をたくさん行い、 練習問題や研究問題も追加しました。
どの巻からでも読み始められますので、 ぜひどうぞ!