この設問はこれまでのものと違って、今日のコンピューターが成り立っている二進法と関連し、あくまでもコンピューターの根本原理がわかっているかどうかを問うようなストレートな設問です。このマイナス二進法なるものが、虚数のような形で理論物理学や数学の世界で役に立つかどうかは別として、ただ現実にはありそうもないマイナスの二進法を考えさせるところなどが、いかにもビル・ゲイツらしい出題と言えます。
さて、ビットという言葉に代表される1と0というオン・オフ2つの信号だけを使って行う二進法の応用はコンピューターが誕生する原点であり、そこでは計算はもちろんのこと、文字も画像も音声もすべてこのビット単位を元にして処理されています。
今日では、このオン・オフの信号処理がデジタルという言葉とともに、CDやDVDなどの音響映像機器やカメラをはじめ、放送や通信などあらゆる分野に入り込み、今や日常生活に溶け込んでいることはご存知のとおりです。
ではまず本題に入る前に、十進法と二進法の簡単なおさらいをしておきます。
十進法では0から9までの10個の数字を使いすべての数を表すものですが、その表現の仕方は10のべき乗という位取り単位が基本になっています。このべき乗という位取りは漢字で書くとよくわかります。たとえば279という数ならば、二百七十九という表現で、百が二つ、十が七つ、そして一が九つから成り立っている数だということを示しています。
これはすなわち2x100+7x10+9で、書き換えれば2x(10)2+7x(10)1+9x(10)0と10のべき乗項で表せます。ただしどんな数でもそのゼロ乗は1という約束で、(10)0は1です。おわかりのように日常生活で我々はこのべき乗項の前の数字だけを「279」というように順に並べて、数を表現しているわけです。
このようにすべての数字を10のべき乗で表現するのが十進法で、その位取り基本単位は、
(10)0、(10)1、(10)2、(10)3、(10)4・・・の1、10、100、1000、10000、・・・単位ということです。
これにならって二進法を考えればおわかりになると思いますが、2のべき乗が位取りの基本単位となります。そして2以下の0と1の2個の数字だけを使って、それを2のべき乗項、(2)0、(2)1、(2)2、(2)3、(2)4、(2)5、(2)6・・・の前に置いて数を表すことになります。
これら(2)0、(2)1、(2)2、(2)3、(2)4、(2)5、(2)6・・・を十進法の数にしますと1、2、4、8、16、32、64・・・ですが、各べき乗項の前に0と1の2個の数字だけを置いてということは、これら1、2、4、8、16、32、64・・・の数字を、0か1回だけ使う組み合わせでもってすべての数を表現せよということです。
たとえば十進法の36という数ならば、32+4ですから1x(32)+2x(2)となり、これを二進法のべき乗の表現にしますと1x(2)5+0x(2)4+0x(2)3+1x(2)2+0x(2)1+0x(2)0になります。したがって十進法の36という数は、二進法の表現ではそのべき乗項の前の数字だけを並べて100100と表わされるわけです。
たまたま我々人間の指が10本であったがために、日常、十進法によって数を表しているだけで、このように考えれば三進法、四進法・・と、いずれ正数をもってしてもすべての数を表現できることがわかります。 では本論に入ります。
おわかりのようにXX進法というのは、XX以下の数を使ってXXのべき乗単位で数を表す方法です。つまり十進法ではXXが十で、二進法では二となり、したがってXXにはどんな数字が入ってもいいわけですが、この設問のようにマイナス二進法といった途端、難題にぶつかります。
これを単純に(-2)のべき乗と理解してすんなり前に進んでいった人は、厳密に考えないまま、暗黙の条件を前提にしているわけです。
難題とは何か、つまり「XX以下の数を使って」というところを考えればわかるはずです。マイナス二進法という言葉を厳密に解釈すれば「マイナス2個の数を使って」ということだからです。しかし物の個数でマイナスなどというカズは現実にはありません。
ビル・ゲイツの設問には、そのロジックをしっかり説明できるかどうかを見ようという「解」がない問題なども混じっていて、これもそれらの範疇に入るような問題かと、一瞬、戸惑うかもしれません。
しかし現実的でないカズのことを一生懸命考えても仕方ないですから、まずは一歩譲って条件を付け、マイナス2個ではなく2個のカズで考えてみます。ところがまたまた難題にぶつかります。今度はその2個あるカズの数字を0と-1にするのか、0と1にするのかという問題です。
本来ならば、0と-1という数字のほうが題意に沿っているのかもしれませんが、そうなると、前の二進法で表した100100のような表記が、たとえば-100-100というような表記になってきてしまい、現実の世界ではこのようなデジタル表記を利用する術も意味もありません。したがってここでも、2個あるカズの数字を0と1にするという前提条件を付けて前に進むことにします。
ではまず、マイナス二進法の位取り単位を考えますと (-2)0、(-2)1、(-2)2、(-2)3、(-2)4、(-2)5、(-2)6・・・になります。これらは十進法で1、-2、4、-8、16、-32、64・・・という数になります。
そして0と1の2個の数字だけを使うということは、前の二進法でも見ていただいたようにこれら1、-2、4、-8、16、-32、64・・・の数を0か1回だけ使う組合せで、すべての数を表現しなければなりません。
はたしてそんなことが可能か。そこで、この(1)、(-2)、(4)、(-8)、(16)、(-32)・・の数をじっと見ていますと、十進法の1、2、3・・を作っていけそうです。
1は、(1)そのもので問題ありません。2は、(4)+(-2)=2としてできます。これは1x(-2)2+1x(-2)1+0x(-2)0=2
ですから、マイナス二進法の表現では110になります。
以下順に (4)+(-2)+(1)=3で、表現は111。 (4)=4で100。(4)+(1)=5で101。(16)+(-8)+(-2)=6で11010。(16)+(-8)+(-2)+(1)=7で11011。(16)+(-8)=8で11000。(16)+(-8)+(1)=9で11001。(16)+(-8)+(4)+(-2)=10で11110となり、このようにマイナス二進法でも十進法の3から10までの数を数えることができるわけです。
しかしこのあと13までは数えられますが、14となるとお手上げです。この設問の背景は、コンピューターの計算原理である二進法の中身を応募者がどこまでしっかりと理解できているかを見ようとしているもので、そのことはこの設問で10まででも表記して数えられるならば充分わかるということなのです。ただし前提条件も忘れないように。
|