2007.06.02
  • twitter
  • facebook
  • はてなブックマーク
  • 印刷

2進数を使うということ

株式会社オーグメント 代表取締役 渡辺 俊雄

ここまで、数回に渡り「電気を使ってどのように計算を行うのか」のお話をしました。信号処理やブール代数、回路の話が続いたので、“難しい”と感じた方も多いのではないでしょうか。ただ、私個人としては、ここではコンピュータが2進数を使う背景を“感じる”程度で十分だと思います。重要なのは、現代のコンピュータが2進数を使う理由、逆に言うと、2進数から逃げられない理由を、おぼろげでも理解していただくことなのですから。だって、「なんで最初から10進数で計算しないんだ」と言われるのはつらいですし。(苦笑) そのつもりで、あと少しお付き合いください。

さて、前回ご紹介した回路は、実は「半加算器(half adder)」と呼ばれるものです。名前から想像できるように、そのままでは不完全で、使える状態にありません。実際に足し算を考えてみるとわかりますが、足し算をする二つの値以外にも、桁上がりがあるかを意識しないといけないですよね。たとえば、10進数で言うと“58+99”のように、1の位の桁上がりを10の位で吸収することをしなくてはいけません。2進数でも、これは同様です。

半加算器には、この桁上がりを処理する部分がありません。ですので、この処理をするために半加算器を2つ使い、1つのOR回路を組み合わせて、3つの入力「入力A」、「入力B」、「桁上げ入力」を処理できる「全加算器」を作ります(このブログでは図を思うように入れられない(汗;)ので、ご興味がある方は、たとえば「ウィキペディア(Wikipedia)」 で「加算器」を引いてみていただけるといいかもしれません。説明がちょっと難しいですが、よくまとまっています)。

現代のコンピュータは、ここまで紹介したような単純な回路を上手に組み合わせ、加算回路や乗算回路といった必要な回路を作っています。実際の設計はもっと複雑ですが……。

では、こむずかしい話はこれぐらいにして /(^^; 、もう少し大切な話に移りましょう。

コンピュータが2進数を使うのには明確な理由があるということはご理解いただけたとして、では「2進数を使うということ」をあらためて考えてみたいと思います。失礼な話かもしれませんが、多くの方々は、「コンピュータは、10進数を内部で2進数に変換して処理し、その結果を10進数に戻しているだけ」だと考えていませんでしょうか。

実は、2進数を使うということには大きな落とし穴があります。このブログを見ているのであれば、おそらくパソコンを使っていると思いますので、よろしければエクセルを立ち上げて、以下の計算をさせてみてください。やることは単純です。セルをひとつ選んで、そこに「1.1引く1引く0.1」を計算させるだけです(あらためて計算させるような内容ではありませんが、ここでは入力の仕方を2通り、実際に試していただきたいと考えています)。では、始めてみましょう。まず最初に、

 =1.1-1-0.1

と入力してみてください。いかがでしょう。ちゃんとゼロになりましたでしょうか。では次に、比較のために、その隣のセルあたりを使って前述の式に括弧を付けて、

 =(1.1-1-0.1)

と入力してみてください。どうなりましたでしょうか。おそらく、ゼロにはならないはずです。私のパソコンでは“8.32667E-17”と表示されました。

ちなみに、この“8.32667E-17”という表記は、小数点第17位に8.32667という値が来るということを示しています(私たちが普段使う小数点表記で示すと“0.0000000000000000832667……”ということですね)。

同じように式を入力したのに、答えは一致しませんよね。繰り返しますが、違いは単に括弧を付けたか否かだけです。なぜでしょうか。次回は、こうした話を題材に、2進法について考えていきたいと思います。


追伸:
コンピュータの仕組みは、非常に興味深い内容を数多く含んでいます。私としては、できるだけ多くの人に、この方面に目を向けていただきたいと考えているのですが、なかなかそうはなりません。もし、このブログを読んでご興味を持たれた方がいらっしゃいましたら、

「体系的に学ぶやさしいコンピュータ教科書 コンピュータの仕組み ハードウェア編(上巻・下巻)」榊 正憲著、アスキー、ISBN4-7561-4427-6

とか、

「やさしいコンピュータ科学」Alan W. Biermann著、和田 英一監訳、アスキー、ISBN4-7561-0158-5

あたりの書籍を推薦いたします。ぜひ一度、ご覧になってみてください。(^^)

渡辺 俊雄(わたなべ としお)

株式会社オーグメント 代表取締役
1958年、東京生まれ。メーカー系システムエンジニア、大手コンピュータ出版社の書籍編集者、インターネット関連組織の広報などを経て2006年に独立。大学生と高校生の二人の子どもを持つ。

ご意見・ご要望、お待ちしています!

この記事に対する皆様のご意見、ご要望をお寄せください。今後の記事制作の参考にさせていただきます。(なお個別・個人的なご質問・ご相談等に関してはお受けいたしかねます。)

pagetop