5 コンピューターで2進数が使われる理

5.1 2進数のメリット

人間の指は10本あることは,よく知られている.そのため,人類は10進法を使っていると 言われている.小学校の低学年では指を使って計算する子供がいることからも分かる.コ ンピューターの内部のハードウェアーでは,電圧が0Vか5V(もっと低い場合もある)でデー タやプログラムを表現している.指が2本しかないのと同じ.だから,コンピューターは2 進法を使う.2進法を使うメリットに,何があるか? という疑問が湧くであろう.その答 えとして,以下のようなことが考えられる.
図 5: 2進法と10進法のコンピューターのノイズレベル
\includegraphics[keepaspectratio, scale=1.0]{figure/volts_2_10.eps}

5.2 2進数のデメリット

それでは,2進数のデメリットとはどのようなことが考えられるであろうか?すぐに分か ることは,桁数が多くなることである.例えば,十進法の$ (99)_{10}$は,二進法では $ (1100011)_2$となる.十進法であれば2桁で済むのに,2進法であれば7桁も必要になる.

このことは,コンピューターが発明された当初問題とされたが,すぐにこれは間違いだと 気づく.ある正の整数$ k$をそれぞれの位取記数法で表した場合,その底の数$ \alpha$と 桁数$ \beta$を表2にしめす.$ n$進数の場合,整数$ k$ を表すの必要な桁数$ \log_n k$は次のようにして理解できる.$ n$進数が$ \beta$桁あると, それが表すことができる組み合わせの数は,$ n^\beta$となる.これが,s整数$ k$まで表す ことができるから,

$\displaystyle n^\beta=k$ (12)

となる.したがって,必要な桁数は,

$\displaystyle \beta=\log_n k$ (13)

となる.

表 2: 整数$ k$を表すときの底と桁数
底の数$ \alpha$ 桁数$ \beta$
1 $ k$
n $ \log_n k$
k 1

それでは,一番効率のよい底の数はいくつであろうか?.効率の定義はいろいろ出来るが, ここでは -4pt

とする.$ n$進数で正の整数$ k$を表す場合,効率は,

$\displaystyle \alpha+\beta=n+\log_n k$ (14)

となる.これが最小となるのは,$ n$で微分3したときゼロとなる,

$\displaystyle \frac{\mathrm{d}(\alpha+\beta)}{\mathrm{d}n}$ $\displaystyle =1-\frac{\log k}{n(\log n)^2}$    
  $\displaystyle =0$ (15)

である.この方程式の解,すなわちもっとも効率の良い底を図6に示 す.この図から分かるように,比較的小さな数字($ \leq 10^5$)では4進数あたりが効率が よい.大きな数になると10進数程度が最適な底となる.コンピューターが扱う最大の数は, 大体$ 2^{32}$程度4である.これだと,2進数で32桁,10進 数で10桁である.この場合,図から分かるようにもっとも効率の良いのが6進数であるが, これだと,13桁が必要である.2進数,6進数,10進数をつかっても,桁数は10〜32 である.コンピューターにとって,32桁を取り扱うことは簡単なことなので,2進数で数 字を表現しても全く問題ない.10進数をつかうことに比べて3倍程度の桁数の増加にしか すぎないのである.2進数を使うことによる桁数の増加は,さほど大きなデメリットではない. それよりも,2進数を使うメリットの方が圧倒的に多い.
図 6: もっとも効率の良い底.横軸は整数で,縦軸はその整数を表すときのもっと も効率の良い底.
\includegraphics[keepaspectratio, scale=1.0]{figure/best_base.eps}

ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成19年2月8日


no counter