あなたと私と進数と
いきなりだが、ここで問題。
問
机の上にリンゴが10個あります。ここに後何個のリンゴを持ってくれば、机の上のリンゴは100個になるでしょうか?
この難問に、あなたは答えられるだろうか。それではシンキングタイム、スタート。
どうだろう、答えは出たかな。では、正解を。
答
10個
正解しただろうか、それとも不正解だっただろうか。正解したあなた、答えを聞いて「ははぁん、そういうことね」とピンときたあなた、本稿は、まさしくあなたの予見する通りのものである。そして、ちんぷんかんぷんなあなたには、しばしのお付き合いをお願いしたい。
不正解だったあなたの答えは、おそらく「90個」だったのではないか。まずは、この答えの妥当性から見ていこう。答えを求める計算式は
100-10=90
である。
一見、妥当であるように思える。数学的破綻もなく、非常に真っ当な計算式に見える。しかし、この計算式は完全に誤りである。何故ならば、この世界は2進数で構成された世界なのだから。よって、正しい計算式は
100-10=10
となるのは、疑問を差し挟む余地もない自明の理である。
進数、普通に生活していると、あまり聞き慣れない言葉である。しかしこれは、数学の基礎の基礎、物をどうやって数えるかを規定した大事な概念である。この進数がきちんと定まっていないと、他人と数字をやり取りすることが出来ない。
進数とは、
「どの区分で数を数えるのか」
を、明確に規定したものである。
具体的に見ていってみよう。
日本人である私達が普段使っているのは10進数である。これは、
「0,1,2,3,4,5,6,7,8,9の10文字で表された数字」
ということを意味している。要するに、
「0から9までの文字を使って数を数えますよ」
ということである。
「リンゴが2個、ミカンが4個、タケシが5人」
といった具合である。9の次はどうなるのかといえば
9+1=10
となる。もう少し詳しく見ていくと、
09+01=10
というふうに、1桁目の9が0に戻り、2桁目の0が1に変化していることが分かるだろう。これが10進数である。
では、10進数で表される数を、10進数で表してみよう。何だかおかしな物言いだが、そこはあまり気にしてはいけない。
11=(1*10^1)+(1*10^0)=11
これは、10進数で表された「11」を10進数で表すとどうなるのかを示した式である。この式を見ると、各桁の数に対して10の(桁数-1)乗を掛けたものを足し合わせていることが分かる。では、3桁の10進数「111」はどうなっているのか。
111=(1*10^2)+(1*10^1)+(1*10^0)=111
となって、やはり同じ構造をしている。つまり、n桁目の10進数xを10進数に変換(実際は変換していないのだが)するには
x=x*10^(n-1)
となる。
では、そもそもの発端、2進数はどうなっているのだろうか。2進数とは
「0,1の2文字で表される数字」
である。これではちょっと分かりにくいので、具体的に数字を順に並べていってみよう。
0,1,10,11,100,101,110,111
これを10進数に直すと
0,1,2,3,4,5,6,7
となる。
では、2進数から10進数に変換するにはどうすればいいのか。
0=0*2^0=0
1=1*2^0=1
10=(1*2^1)+(0*2^0)=2
11=(1*2^1)+(1*2^0)=3
つまり、n桁目の2進数xを10進数yに変換するには、
x=x*2^(n-1)=y
となっていることが分かる。
これをもう少し拡張して、n桁目のz進数xを10進数yに変換する式を考えてみよう。これは、
x=x*z^(n-1)=y
となる。
ここまでの話をふまえて、冒頭の問題に立ち返ってみよう。冒頭の問題は2進数で書かれていたので、まずはこれを10進数に変換してみる。
問
机の上にリンゴが10=(1*2^1)+(0*2^0)=2個あります。ここに後何個のリンゴを持ってくれば、机の上のリンゴは100=(1*2^2)+(0*2^1)+(0*2^0)=4個になるでしょうか?
これの答えを求める2進数の式は
100-10=10
だったが、これを10進数に変換すると
4-2=2
となり、2進数による答え10は正しいことが分かる。
ここまで進数を見てきて、「何でこんな面倒くさいことをするのか」と思ったかもしれない。それは至極真っ当な感覚で、そもそも進数なぞを持ち出さなければ、冒頭の問題にあなたが不正解になることはなかったのである。では、なぜ進数というものが使われているかというと、これはもっぱら習慣と利便性による。
2進数が使われるのは、主にコンピューター分野である。映画などで、デジタル世界の表現として0と1が並んだ映像を見たことがあるだろうか。あんな感じである。では、何故コンピューター関連は2進数なのかといえば、これはもう完全に利便性による。2進数は機械化し易いのだ。
2進数は0と1の二つの状態の組み合わせで表現されている。これを機械的に再現しようとすれば、異なる二つの状態を再現できればよい。つまり、スイッチがonかoffかで再現できるのだ。これが10進数となると大変だ。なにせ段階的に変化する10の状態で表現されているものを機械的に再現するには、10段階に変化する素材、ないしは機械的構造を用意してやらなければならない。2進数と10進数、機械化に向いているのは比べるまでもなく2進数である。
つまり、乱暴な言い方をすれば、2進数で設計した通りにスイッチをたくさん並べればコンピューターを作れるのだ。
では、私達が普段10進数を使っているのはどういった理由からだろうか。これは、そういう習慣だからとしか言いようがない。間違っても10進数が優れているからということはない。進数間に優劣はなく、ただ向き不向きがあるぐらいである。
一説には、物を数える時に指の本数で数えたからだと言われている。幼い時に、指を折りながら物を数えた経験はないだろうか。人間の手の指の本数は左右合わせて10本なので、指折り数えると自然と10進数になる。
これはかなりうろ覚えの確度の低い話なのだが、マイナーな言語の中には8進数で数える言語があるということを聞いたことがある。何故8進数なのかといえば、物を数える時に指ではなくて指と指の間の股を使って数えるからだそうだ。普段何進数を使うかというのは、ほんの些細な習慣の違いというだけの話なのである。
さて、私達が普段使っているのは10進数だが、じゃあ身の回り全部10進数で溢れているかというと、以外にそうでもなかったりする。
カレンダーを思い出してほしい。1年は何ヶ月だろうか。そう、12ヶ月。つまり、12進数である。時間も0から11までの12進数で表されていて、分と秒は0から59までの60進数である。
もしあなたが毎日ビールで晩酌をするなら、ビールをパックで買い置きしているかもしれない。1パック6缶入りなので6進数だ。ケースで買い込む猛者なら、1ケース24缶入りなので24進数になる。
普段生活するにおいて意識することはないが、私達は様々な進数を器用に使い分けて生きている。それは数学的にいえば、異なる進数世界が重なり合ったカオスな世界である。あなたは自分のことを常識人だと思っているかもしれないが、間違いなくカオスな世界の住人なのである。