矢沢久雄

 一般に,アメリカ人と直接会話するには,英語を話さなければならない場合が多々あります。皆さんは,自分の伝えたいことをなんとかして英語に訳して話そうとするでしょう。それと同様に,皆さんがコンピュータと直接会話するには,コンピュータに対して2進数で情報を伝えなければなりません。なんとかして10進数を2進数に変換してコンピュータに伝え,コンピュータから2進数で返される応答を10進数に変換しなければなりません。2進数と10進数の変換方法はとても簡単です。前回の連載で説明した10進数の仕組みに当てはめて考えれば,すぐに覚えられます。手順を丸暗記するのではなく,理屈を覚えてください。実際にやってみましょう。

図1●重みを掛けて加算する
図2●10進数でも考え方は同じ
図3●2で割ることを繰り返し、あまりを下位桁から並べる

●2進数から10進数への変換

 まず,2進数で表された1001という数値を10進数に変換する方法を説明します。これは「桁の重みに桁に書かれた数値を掛け,その結果をすべて加算する」という手順になります。

 10進数なら下位桁から1,10,100,1000,…と,桁が上がるごとに10倍されていきます。2進数の場合は,下位桁から1,2,4,8,…と桁が上がるごとに2倍されていきます。これを桁の「重み(おもみ)」と言います。10進数だから10倍,2進数だから2倍なのだと考えてください。この1,2,4,8,…と各桁に書かれた数値(2進数なので0または1です)を掛け,その結果をすべて加算すれば2進数を10進数に変換できます(図1[拡大表示])。図1から,2進数の1001は10進数で9だと分かるでしょう。

 この手順が分からない人は,10進数の仕組みを思い出してください。10進数だって,重みを掛けて加算した値を表しているのです。2進数だって同じです。10進数と2進数の違いは,桁の重みだけです(図2[拡大表示])。

●10進数から2進数への変換

 今度は,9という10進数を2進数に変換してみましょう。これは「10進数を2で割ることを繰り返し,そのたびに得られたあまりの数を下位桁から並べる」という手順になります。ちょっと難しそうに思えますが,図3[拡大表示]を見てイメージをつかんでください。

 2で割ることは,「1÷2=0あまり1」のように,答えが0になるまで繰り返します。10進数の9は,2進数で1001となることが分かりました。さて,どうしてこの手順で10進数を2進数に変換できるか,その理由が分かりますか?これも10進数の仕組みと照らし合わせれば理解できるはずです。

 2で割ったあまりを求めると,2進数の値が下位桁から順に得られるわけです。これは,10で割ったあまりを求めると,10進数の値が下位桁から順に得られることと同じ理由です。例えば,123という10進数を10で割ってみましょう。123÷10=12あまり3となって,下位桁の3が得られますね。今度は,12を10で割ってみましょう。12÷10=1あまり2ですから,2が得られました。最後に1を10で割って1÷10=0あまり1で,1が得られました。これと同じことを2進数で行うには,2で割ることを繰り返すわけです。簡単でしょう!

図4●Windowsの電卓アプリケーション

●もっと簡単な変換方法

 最後に,もっと簡単な方法を紹介しておきましょう。それは,Windowsに標準で付属している「電卓アプリケーション」を使うことです(図4[拡大表示])。電卓アプリケーションは,現在表示されている数値をマウス操作で10進数にも2進数にも変換できます。いろいろな数値を2進数や10進数に変換して,遊んでみてください。

 今回のお話は,まるで数のお遊びのようでしょう。そうなっても当然なのです。コンピュータは,すべての情報を数値で取り扱うからです。ただし,数学の難しい方程式などは登場しませんから,数学嫌いであっても安心してください。次回は,マイナスの数を2進数で表す方法を説明します。