5 コンピューターで2進数が使われる理
人間の指は10本あることは,よく知られている.そのため,人類は10進法を使っていると
言われている.小学校の低学年では指を使って計算する子供がいることからも分かる.コ
ンピューターの内部のハードウェアーでは,電圧が0Vか5V(もっと低い場合もある)でデー
タやプログラムを表現している.指が2本しかないのと同じ.だから,コンピューターは2
進法を使う.2進法を使うメリットに,何があるか? という疑問が湧くであろう.その答
えとして,以下のようなことが考えられる.
- ノイズに強い
0〜5Vで動作する素子からできたコンピューターを考える.2ビットと10ビット
の場合,割り当てられる電圧のレベルは,図5の通りであ
る.図からも分かるように,許されるノイズは,2ビットの方が格段に大きく
なる.1ビットのエラーも許されないデジタルコンピューターにおいては,こ
の差は非常に大きい.
- ハードウェアーを実現するのが容易
コンピューター内部には,単純な動作をする同じような部品が数多くある.2進数であれ
ば,入力は0と1,出力も0と1なので,構成する1個の部品が非常に単純になる.要するに
2進数を採用すると,部品が簡単になるのである.
- 演算が簡単
例えば,掛け算九九を考えると分かる.10進数だと,0〜9までの掛け算,合計100通りあ
る.2進数だと,4通りで済む.
- ブール代数が使えて,論理演算が容易
ブール代数については,他の授業で勉強することになっている.それまで待て
ない人は,私の講義ノートでも見ろ.
図 5:
2進法と10進法のコンピューターのノイズレベル
|
それでは,2進数のデメリットとはどのようなことが考えられるであろうか?すぐに分か
ることは,桁数が多くなることである.例えば,十進法の

は,二進法では

となる.十進法であれば2桁で済むのに,2進法であれば7桁も必要になる.
このことは,コンピューターが発明された当初問題とされたが,すぐにこれは間違いだと
気づく.ある正の整数
をそれぞれの位取記数法で表した場合,その底の数
と
桁数
を表2にしめす.
進数の場合,整数
を表すの必要な桁数
は次のようにして理解できる.
進数が
桁あると,
それが表すことができる組み合わせの数は,
となる.これが,s整数
まで表す
ことができるから,
 |
(12) |
となる.したがって,必要な桁数は,
 |
(13) |
となる.
表 2:
整数
を表すときの底と桁数
底の数 |
桁数 |
1 |
 |
n |
 |
k |
1 |
それでは,一番効率のよい底の数はいくつであろうか?.効率の定義はいろいろ出来るが,
ここでは
-4pt
- 底の数と桁数で評価することにする.ある整数を表す場合,これらの数の合計が
小さいことが,効率がよい.
とする.

進数で正の整数

を表す場合,効率は,
 |
(14) |
となる.これが最小となるのは,

で微分
3したときゼロとなる,
である.この方程式の解,すなわちもっとも効率の良い底を図
6に示
す.この図から分かるように,比較的小さな数字(

)では4進数あたりが効率が
よい.大きな数になると10進数程度が最適な底となる.コンピューターが扱う最大の数は,
大体

程度
4である.これだと,2進数で32桁,10進
数で10桁である.この場合,図から分かるようにもっとも効率の良いのが6進数であるが,
これだと,13桁が必要である.2進数,6進数,10進数をつかっても,桁数は10〜32
である.コンピューターにとって,32桁を取り扱うことは簡単なことなので,2進数で数
字を表現しても全く問題ない.10進数をつかうことに比べて3倍程度の桁数の増加にしか
すぎないのである.2進数を使うことによる桁数の増加は,さほど大きなデメリットではない.
それよりも,2進数を使うメリットの方が圧倒的に多い.
図 6:
もっとも効率の良い底.横軸は整数で,縦軸はその整数を表すときのもっと
も効率の良い底.
|
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成19年2月8日