普段、私たちが見ているこの世界。
ほんの少しだけ「数学」を知ってみると、意外な奥行きが見えてくるかもしれません。
今回は「コンピュータにまつわる数字」について紹介します。
32や128など、コンピュータにまつわる数字には、中途半端なものがよく使われていますよね。
一見すると30や130の方が、キリも良いしわかりやすいと思われるかもしれません。しかし、実は32や128などの数字には、ある秘密があるのです。そこには、私たちの「数の捉え方」が深く関わっています。
日常で使っているのは「10進法」
私たちが日常的に使っている数は「10進法」という表記法に基づいています。
なぜ「10」なのかというと、10種類の数字「0,1,2,3,4,5,6,7,8,9」を用いているからです。
当たり前に使っている「10進法」ですが、今一度改めて、その仕組みを見てみましょう。
0の次の数は1、1の次の数は2、2の次の数は3、3の次の数は4、4の次の数は5…と、順々に数を表現してみます。
ポイントになるのは、9の次の数です。これは10になり、位が上がりますよね。
10進法では、「0,1,2,…,8,9」の10種類の数字しか使えないので、「9の次の数」を1文字(1桁)で表現する数字はありません。そのため、位を上げて「10」とすることで「9の次の数」を表現しています。
同様にして、19の次の数は20、29の次の数は30、39の次の数は40、49の次の数は50…と表現しています。
さらに、その後も見ていきましょう。ポイントとなるのは、99の次の数である100です。「99の次の数」を表すために、位を上げて「100」としています。
このように、10進法では、適宜、位を上げたり、繰り上がりをしたりしています。その工夫のお陰で、あらゆる数を次々に表現することができているのです。
現代の私たちは、この10進法にとても慣れ親しんでいますが、「いつでもどこでも10進法が必ず用いられてきた」というわけではありません。例えば、古代バビロニアでは60進法を用いていました。
「2進法」とは?
では、慣れ親しんでいる「10進法」の世界を飛び出して、「2進法」の世界へと旅立ってみましょう。
2進法では「0,1」という2種類の数字しか使うことができません。そして、コンピューターが得意とするのは2進法です。
人間にはできない超高度な計算をこなしてしまうコンピューターが、2種類の数字しか使っていないって、ちょっと不思議に感じませんか。これは、「電気信号のオン・オフ」のようなシンプルな二状態に、2進法の「0,1」を対応させているからなのです。では、実際にコンピューターの数字世界を体験してみましょう。
まず、私たちの普段使っている0は0のまま、そして、1も1のままで大丈夫です。
では、「私たちの普段使っている2」、つまり、「10進法における2」は、どう表現すれば良いのでしょうか?2進法では「0,1」しか使えません。
ここで、ヒントとなるのは「10進法において『9の次の数は10』」ということ。10進法では、10種類の数字しか使えなかったので、位を上げて「9の次の数は10」としていました。
2進法においても同じです。2種類の数字しか使えないので、「1の次の数」を表すために、位を上げて「10」としてしまえば良いのです。
つまり、 10進法における2 = 2進法における10 ということになります。
「2と10が同じもの?変な感じだなあ」と思うかもしれません。そう感じる場合は「呼ばれ方が変わった」と考えてみると良いと思います。
例えば、太郎さんという人が、家では「太郎」と呼ばれ、学校では「たっくん」と呼ばれているとしましょう。一人の人物の呼ばれ方が、家と学校という環境の違いで変わっています。
今回の「1の次の数」も太郎さんの場合と同じで、10進法の世界では「2」と呼ばれ、2進法の世界では「10」と呼ばれているのです。つまり、10進法と2進法という環境の違いにより呼ばれ方が変わっています。
では、次の数も見てみましょう。「10進法における『2の次の数』」、つまり、「2進法における『10の次の数』」です。これは「11」となります。
つまり、 10進法における3 = 2進法における11 ということになります。
さらに、その次の数も見てみましょう。「10進法における『3の次の数』」、つまり、「2進法における『11の次の数』」です。これは一体、どうなるのでしょうか?
ここで、ヒントとなるのは「10進法において『99の次の数は100』」ということ。2進法においても同じように、位を上げて「11の次の数」を「100」と表現します。
つまり、 10進法における4 = 2進法における100 ということになります。
このようにしていくと、10進法・2進法での数の表現は以下のように対応していきます。
10進法 | 2進法 |
---|---|
0 | 0 |
1 | 1 |
2 | 10 |
3 | 11 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
8 | 1000 |
9 | 1001 |
10 | 1010 |
11 | 1011 |
12 | 1100 |
13 | 1101 |
14 | 1110 |
15 | 1111 |
16 | 10000 |
現代の私たちは、慣れ親しんでいる10進法を扱うのが非常に得意です。しかし、これはコンピュータにとっては違っているのです。
「2進法」でキリの良い数
私たちは、10進法で「100」や「10000」を見たときに、「キリが良い」と感じますよね。では、「コンピュータにとってキリが良い数」、つまり、「2進法でキリが良い数」を見てみましょう。
先ほどの表での、「2進法における10」「2進法における100」「2進法における1000」「2進法における10000」を見てみると…
10進法 | 2進法 |
---|---|
2 | 10 |
4 | 100 |
8 | 1000 |
16 | 10000 |
それぞれ、「2,4,8,16」が対応しています。つまり、2からスタートして、次々に2を掛けていった数が対応しています。
実は、この後の数も見ていくと…
10進法における32 = 2進法における100000
10進法における64 = 2進法における1000000
10進法における128 = 2進法における10000000
となります。
つまり、2からスタートして、次々に2を掛けていった数が「コンピュータにとってキリが良い数」なのです。
32bitの「32」や、128GBの「128」といった数は、この中に含まれていますね。
数式を使って表現してみると、10進法で
\[
2^n \quad (n=1,2,3,4,5,\cdots)
\]
と表される数が、2進法の「10,100,1000,10000, 100000,…」に対応しており、「コンピュータにとってキリが良い数」となっています。
32や128は、10進法に慣れ親しんでいる私たちからすると中途半端ではありますが、2進法の世界で見ると、「100000」や「10000000」となり、キリが良いのです。
身近にある「16進法」や「60進法」
2進法以外にも、私たちの身近には「10進法以外の表現」が潜んでいます。例えば、Webページで色を表現するカラーコードでは16進法を用いています。
その他にも、私たちにとても身近な「10進法以外の表現」があります。
それは「時間」です。
60秒で1分、60分で1時間といった具合に、60になる度に、位が上がっていきます。つまり、時間では60進法が使われていると考えることができます。
私たちは、すっかり10進法に慣れ親しんではいますが、たまには「2進法」や「16進法」や「60進法」の世界を覗いてみると、なかなか面白いかもしれません。
例えば、「年齢は?」と聞かれたときに、「2進法では100000歳です」「16進法では20歳です」なんて答えても、決して間違いではないのです。
ぜひ数で遊んでみてくださいね。