二進法(0と1だけの世界)

0、数字は10個しかないのにどうして全ての数を表すことができるの?

T:数字っていくつある?
S:そんなのいくつでもあるよ。
T:本当かな?
S:あっ、そうか。数字は10個しかない。
S:たった10個の数字でどんな大きな数でも表せるんだから不思議だね。
T:では、もし数字が0と1しかなかったら、どうなるだろう。
S:簡単でいいや。
S:でも、数えるときに困らない?
S:2はどうやって表せばいいんだ?
S:コンピュータは0と1しか知らないということを聞いたことがあるから、2も0と1で表せるんではないの?
S:10個の数でどんな数でも表せるんだから2個だってできるよ。
S:じゃあ、どうやって2を表すの?
S:十は繰り上がるだろ。同じで、1の次は繰り上がって10にすればいいんだ。
S:ということは、3は11か。で、次の4は一の位も繰り上がり、十の位も繰り上がるから100。
S:そして、101、110、111、1000・・・となるわけか。

T:よく考えたね。さて、ここに変換ソフトがあるから、いろいろな数字を入れて確かめてみて。
≪ジオジェブラの表計算で変換する≫
T:このように、0と1だけで数を表す方法を二進法といい、表された数を二進数という。
S:ということは、今までの表し方は、10進法ということか。
S:コンピュータはどうして二進法なの?
T:電気が流れている(ON)を1、流れていない(OFF)を0とするとONとOFFだけで表すには二進法が便利だからじゃない。S:ということは、豆電球を何個か並べておいて、それをON・OFFにするだけで数字を表せるということだね。
S:それは簡単だ。それにさ、計算も簡単だよ。

1、二進法の計算は簡単

S:二進法の計算ってどうやってやるの?
S:1+1=繰り上がって10だ。
S:1+0=1と0+1=1と1+1=10さえわかれば後は簡単だよ。
S:例えば、11001+10001=101010か。
T:じゃ、111+111=?
S:1110だ。
T:この計算が正しいかどうか、さっきの変換ソフトで確かめてみよう。
S:まず、111を十進数に直すと7だから、7+7で14。
S:14を二進数に直すと、1110になった。
T:ということは、この計算方法は正しいということだね。
S:十進法でやるよりもこっちのほうがはるかに簡単だよ。
S:だから、コンピュータは二進法で計算しているのか。
S:でも、桁数がめちゃくちゃ大きくなってしまうよ。
S:コンピュータは記憶容量が大きいから大丈夫だよ。

S:掛け算だって、1×1=1で0×1=0だからもっと簡単だ。
S:ということは、コンピュータは十進数を二進数に直して計算し、それをまた、十進数に直しているのかな。めんどくさいようだけど、かえって簡単かもしれない。

2、そもそも世界は0と1で出来ている

S:数が0と1で表せることはわかったけど、デジタルって0と1で表されているということでしょ。どうやって0と1で文字を表せるの?
S:そういえば、CDやDVDなんか0と1だけで表していると聞いたな。音や絵をどうやって0と1で表せるんだ?
T:まず文字だけど、それは数字を文字に当てるのさ。
S:数字を文字に当てはめたら、その数字は使えないじゃない。
T:おっと、数字(自然数)は無限にあることを忘れているよ。日本語の文字なんかせいぜい51個だろ。漢字だって無限にあるわけじゃない。
S:でも、数字を5000個も使ったら、その数字は使えないんでしょ。
T:だから、5001を1とすれば全ての数を表すことができるよ。
S:5002は2ということ?
S:計算は5001+5002=5003だから3になるということか。
S:無限にあるということは便利なんだね。
S:文字はわかったけど、音や絵はどうするの?
T:音も数字で表すことができる。音色と高さと大きさの3組の数を使えばいいよ。絵は一点一点の色を決めればいい。色は赤黄青の三原色でできるよ。このパソコンのディスプレーを30倍の顕微鏡で見ると3つの色に分かれていることがわかる。
S:そうやっていくと、どんなことでも0と1で作ることができるということですね。
T:もっともそれは、コンピュータの中だけだね。

3、片手でいくつまで数えられる?

T:片手を折り曲げていくつまで数えられる?
S:片手だったら5つまでに決まっているよ。
T:実はもっとたくさん数えることができるんですよ。

S:二進法を使うんですね。
T:最初に指を折り曲げるている。右手の親指を立てて1とする。次の2は、二進法では10だから、指では?
S:人差し指を立てて親指を折る。
S:そうか。そうすると、3は親指を立てる。
S:4は中指だけ立てて、後は折るんだ。
S:こうやって数えれば、5・6・7・・・
S:31まで数えれる。
T:二進法で11111だから、これを十進数に直すと・・・

S:さっきの変換ソフトを使えば求められるけど、計算で出せないの?
T:2+2+2+2+1=16+8+4+2+1=31で求められるよ。
S:ソフトもこうやって計算しているんだね。

4、二進法でそろえる

T:左の図のように数の上に穴を造る。次に、それぞれ数ヶ所この穴を切る。
どういう法則で穴を切っているかわかるかい?
S:二進法でしょ。
S:きっているのが1で、切ってないのが0だ。
S:さっきの指で数えるのと同じだよ。
T:このように15までの数のカードが作ってある。このカードを順番がばらばらになるようにシャッフルする。さて、これを一切中を見ずにこの爪楊枝だけで1から順番に並べてみるよ。
S:穴を使うの?
T:そうです。この爪楊枝をまず一番右の穴に通す。そして持ち上げる。これを残ったカードの手前に持ってくる。次は2番目の穴に通す。そして持ち上げ同じように前にやる。こうやって順番に4回やっていくと・・・。(穴は5つ作ってあるけど5番目の穴は使ってない。)
S:本当だ。1から順番に並んでいる。
S:どうして?
T:15のカードはどうなっている?
S:4つ穴が切ってある。
S:ということは、15は一度も持ち上げられていない。
S:だから最後まで残るんだ。1は逆だね。
S:それでそろうのか。

二進法で数を当てるパズル

T:0から7までの数の中から1つ数を選んでください。
S:それを当てるの?
T:そうです。でも、質問をするよ。その質問はイエスかノーで答えるだけ。さて、最低何回質問すれば見つけられるか?
S:わかった。まず半分にする。こちらですかと聞けば、どちらにあるかわかる。次に4つの数を半分に分ける。残りは2個だからもう一回質問する。だから、3回かかる。
T:そうですね。8個の数字から1個の数を見つけるためには、質問が3回必要だ。では半分に分けるという方法以外にないだろうか?
S:3回以内に見つけられる方法があるの?
T:いやいや、必ず3回は必要だよ。まず、カードを3枚用意する。1枚目には[1357]。2枚目は[2367]。3枚目は[4567]。あなたの選んだ数は1枚目にありますか?
S:はい。
T:2枚目にありますか?
S:はい。
T:3枚目にありますか?
S:はい。
T:あなたの選んだ数は、最初の数を全部足して1+2+3+4=7ですね。
S:当たった。
S:全部にあるのが7だから当たり前だよ。
S:でも、例えば3を選んだとすると、1枚目と2枚目だから合計すると3だな。
S:どうして合計で求まるんだろう。
T:さっきの穴の開いたカードで考えてみよう。1357に共通するのは?
S:一番右の穴が切ってある。
S:2367は2番目の穴が切ってある。
S:ということは、4567は3番目の穴が切ってある。
S:そうか。わかったぞ。

参考文献
「初めて出会うコンピュータ科学1〜8」・岩波書店・徳田雄洋著

5、スケルトン電卓の秘密

S:電卓も二進法が使ってあるんでしょう。でも、外から見る限り二進法が使ってあるなんてわからないね。
T:この前、スケルトン電卓を手に入れたんだ。半透明になっていて少し配線がわかる。これを見ていて、気がついたことがあるんだ。
S:配線が二進法なの。
T:配線だけ見てもわからないな。でも、この数字のディスプレーを接続する配線を数えてみて。
S:線がプリントされて並んでいるね。
S:エート、線が27本あるよ。
T:そうなんだ。この27本というのが何か意味を持っているのか考えてみたんだ。
S:先生って暇人だねえ。
T:暇人は考えた。なぜ27本なのか。
S:そういえば、ディスプレーの数字は8桁しか出ないよね。
T:そうなんだ。8桁と27本をつなぐものは何か?
S:電卓は二進法で計算されているんでしょ。十進法で8桁は、二進法では何桁になるの?
T:いいところに気がついたね。二進法で1桁は1まで。2桁は2。3桁になるのは4から。4桁は8。5桁は?
S:8=1000だから9=1001,10=1010,11=1011・・・
S:そんなめんどくさいことをしなくてもいいよ。2の5乗=16だよ。
S:16は二進法では8桁か。でも、このままいくと計算が大変だね。
T:そうですね。2の5乗でやっと2桁だからね。つまり二進法で5桁が十進法ではやっと2桁だ。でも、この計算で良いんだよ。2の10乗ではどうか?
S:電卓がいるな。2×を押して、=で2乗。また=で3乗。=を何回押せば8桁になるのかな。
S:オッ!26回目でエラーが出た。
T:エラーが出たということは、8桁を越えたということだね。
S:でも、27ではなく26だよ。
T:最初に2を入れているから2の27乗ですよ。
S:つまり、この配線は、二進法で27桁の数を十進数に直して表示しているということか。
T:電卓に二進法が使われていることが少しわかったね。

6、列車のポイントとフィボナッチ数

T:9ゲージで鉄道模型を作る時、鉄道の操車場の配線で、同じ8本でもフィボナッチ数列(1、2、3、5、8)で線路を引いたのと、二進法で(1、2、4、8)で線路を引くのはどっちが便利だろうか?
S:操車場って、線路を切り替える所?
T:そうだよ。線路を切り替えるのにポイントを使うだろ。その操車場の配線について考えたことがあるんだ。問題は、線路が8本の時の連結の仕方が二進数のときと、フィボナッチ数ではどう違うか。
S:二進数の切り替えってどういうの?
T:それは、この図のようになる。


            二進数のポイント
1                 |
2               1 /\0
                /  \
               /    \
              /      \
4           1/\0    1/\0
              /  \    /  \
8          1/\01/\01/\01/\0
            | | | | | | | |
切替の回数      3 2 2 1 2 1 1 0 =12

S:じゃフィボナッチ数のポイントとは?

          フィボナッチ数のポイント
1                 |
2                0/\1
                 /  \
3              0/\1  \
               /  \   \
5            0/\1  |  1/\0
            /  |  |  |  \
8         0/\1 | 0/\1 | 1/\0
           | | | | | | | |
切替の回数      0 1 1 1 2 2 2 1 =10

(1)どちらもポイントの数は7ポイントで同じ。
(2)ポイントを切り替えるのを1、切り替えないのを0とすると、切り替える回数の合計は、
 二進数では12回、フィボナッチ数では10回と少なくなる。
(3)よって、下のようにフィボナッチ数で連結をした方が合理的。

T:つまりどの線路も同じ様に使うとすると、フィボナッチ数の方がポイントを切り替えるエネルギーが少なくて済むということなんだ。
S:同じように見えるのにどうして違いが出るんだろう。
T:「切り替える」と「切りかえない」をどれにするかで、違いがでるからなんだね。

7、木の枝わかれ

T:さっきのポイントを木の枝と考えると、どうなるだろうか。
S:木ということは、さっきの図を逆にすればいいんだな。
S:道や川に支流と本流があるように、木にも幹と枝があるよね。
T:そうすると、さっきの「ポイントを切り替える」を「枝を出す」と考えればどうなる。
S:二進法の枝分かれよりもフィボナッチ数の枝分かれの方が、あてはまっているのじゃないかな。
S:図を見ると、下の木の方が自然らしいよ。
S:私はどちらもありそうだと思うな。

               二進数の木
枝の数       3 2 2 1 2 1 1 0 枝を出すスイッチの回数
8           \/  \/  \/  \/
              \  /    \  /

4            \/      \/
              \      /
               \    /
                \  /
2                 \/

1                 |


             フィボナッチ数の木
枝の数       1 2 2 2 1 1 1 0 枝を出すスイッチの回数
8         \/  |  \/  |  \/
           \  |  |   |  /
5           \/   |   \/
             \   \   /
3             \   \/
               \  /
2               \/
1                |

T:フィボナッチ数の木の枝は、「枝を出す」が「ポイントを切り替える」エネルギーと同じだとすると、二進数の木よりも木全体のエネルギーが少なくて済むね。
S:でも、上の図だと、枝分かれの規則がわかりにくいな。
T:そうだね。では、左の図を見てください。まず、上の図の一番右の枝を幹とする。そして、枝は左右に交互に出す。枝分かれの規則は、2節育ったら枝分かれする。一度枝分かれした枝は、その後は一節で枝分かれする。こうすると6節で枝が8本になる。
S:そうか。7節目では枝は13本になるね。フィボナッチ数列だ。
S:私が木だったら、フィボナッチ数の方を選ぶな。

8、[二進木]を作ってみよう   → 木の枝分かれについては【年輪の数学】のページへ

「二進数の木」を育てます。年数を半角で入力してください。ActiveX(L3)のソフトです。インストールすれば,すぐに見ることができます。

9、[フィボナッチ木]を育ててみよう

「フィボナッチ数の木」を育てます。枝の数も再帰命令で計算しています。さて、どちらが自然の木に見えるでしょうか。

10、分数を二進法の少数にするにはどうしたらいいか

5/8=(1/2)*(5/4)=1/2(1+1/4)=1/2+1/8
        =0.101(2)
        =1/2(1+2/8)=1/2(1+1/8+1/8)
        =1/2(1+1/8+2/16)=1/2(1+1/8+1/16+2/32)
        =・・・
        =1/2+1/16+1/2+…
        =0.100111…(2)
        
2/3=(1/2)*(4/3)=1/2(1+(1/4)*(4/3))=1/2(1+1/4(1+1/3))
        =1/2(1+1/4(1+(1/4)*(4/3)))
        =1/2(1+1/4(1+1/4(1+1/3)))
        =・・・
        =1/2+1/8+1/32+…
        =0.101010…(2)
        
0.1(10)=1÷10  =(1/16)*(8/5)=1/16(1+3/5)
        =1/16(1+(1/2)*(6/5))=1/16(1+1/2(1+1/5))
        =1/16(1+1/2(1+(1/8)*(8/5)))
        =1/16(1+1/2(1+1/8(1+3/5)))
        =・・・
        =1/24+1/25+1/28+1/29
        =0.000110011…(2)

もどる