電子計算機
第3回
|
電子計算機10進数と2進数数(正の整数)の表記方法を示します.そして,10進数と2進数の相互の変換方法を学びます. 目次講義を始める前に本日の授業のテーマ本日の授業のテーマは,以下のとおりです.
本日の授業のゴールは、以下のとおり。
先週の復習
新たな世界へ (2進数の世界)N進数法とは通常使われる数字は、10進法です。これは、0~9の数字を用いて、数を表現します。コンピューターの内部では、2進法を使っています。0と1だけの2個の数字で、すべての数を表現します。1ビットという単位が2個の状態を表すのと対応しています。 N個の数字で数を表すのをN進数といいます。また、基数がNと言うこともあります。また、その底は、(0, 1, 2, 3, …, N-1)です。例えば、
です。
なぜ2進数で表現するか人間の指は、10本あります。そのため、人類は10進法を使っていると言われています。コンピューターの内部では、電圧が0Vか5V(もっと低い場合もある)で表現をします。指が2本しかないのと同じです。だから、コンピューターは2進法を使うのです。 では、2進法を使うメリットとは、何があるのでしょうか? 10進法ではなく、2進法を使う理由は、どこにあるのでしょうか? 大体、以下の理由が挙げられます(教科書P.11)。
とはいえ、世界初の電子計算機ENIACは、10進法が使われていました。それ以降の通常の電子計算機は、すべて2進法です。 数字の表現方法例えば、今年は2003年です。10進数の2003の表記はどのような意味があるのでしょうか? これは、次のように解釈します。えらそうですが、こう解釈すると、他の底の数字の意味がわかりやすくなります。 \begin{align} (2003)_{10}=(2\times 10^3+0\times 10^2+0\times 10^1+3\times 10^0) \label{eq:2003} \end{align}括弧の下の10は、10進法の意味です。 コーヒーブレイクゼロがない時代は、大変だったのです。ゼロが無いと、(1)のような表記は出来ません。0 (ゼロ)が発見されたのは、6世紀頃のインドと言われています。西暦0年がないのは、このためです。西暦が考えられた頃は、ゼロがなかったのです。 変換(正の整数の場合)数の変換 (2進数から10進数へ)これは、簡単です。式\eqref{eq:2003}を理解していれば、分かります。2進数であろうが、10進数であろうが、表記法は同じです。すなわち、 \begin{align} (10011)_2 &= (1\times 2^4+0\times 2^3+0\times 2^2+1\times 2^1+1\times 2^0)\nonumber\\ &=(16+0+0+2+1)_{10}\nonumber\\ &=(19)_{10} \end{align}となります。ただ、基数が違うだけです。ところで、この演算を施すと、なぜ、10進数に変換されるのでしょうか? 3進法や5進数ではなく、われわれが普通に使う10進数に変換された理由は、なぜでしょうか? 10進数は特別なのでしょうか? いいえ、10進数は特別ではありません。みなさん、考えてください。 数の変換 (10進数から2進数へ)つぎに逆を考えましょう。たとえば、先ほどの19を \begin{align} (19)_{10}=(a_0\times 2^0+a_1\times 2^1+a_2\times 2^2+a_3\times 2^3+a_4\times 2^4+\cdots) \end{align}と表現したいのです。それぞれ、\(a_n\)を求めなくてはなりません。そこで、次の変形を考えましょう。 \begin{align} (9\times 2+1)_{10}=(a_1\times 2^0+a_2\times 2^1+a_3\times 2^2+a_4\times 2^3+\cdots)\times 2+a_0 \end{align}となります。これをよくにらむと、\(a_0 = 1\)ということが分かります。すなわち、\(a_0\)は19を2で割ったあまりです。残りの部分は、 \begin{align} (9)_{10}=(a_1\times 2^0+a_2\times 2^1+a_3\times 2^2+a_4\times 2^3+\cdots) \end{align}となることも分かるでしょう。同じことをすると、 \begin{align} (4\times 2+1)_{10}=(a_2\times 2^0+a_3\times 2^1+a_4\times 2^2+a_5\times 2^3+\cdots)\times 2+a_1 \end{align}となります。したがって、\(a_1 = 1\)になります。しつこいようですが、さらに同様に進めると、 \begin{align} (2\times 2+0)_{10}&=(a_3\times 2^0+a_4\times 2^1+a_5\times 2^2+a_5\times 2^3+\cdots)\times 2+a_2& \Rightarrow &&a_2=0 \nonumber\\ (1\times 2+0)_{10}&=(a_4\times 2^0+a_5\times 2^1+a_6\times 2^2+a_7\times 2^3+\cdots)\times 2+a_2& \Rightarrow &&a_3=0 \\ (0\times 2+1)_{10}&=(a_5\times 2^0+a_6\times 2^1+a_7\times 2^2+a_8\times 2^3+\cdots)\times 2+a_2& \Rightarrow &&a_3=1 \nonumber\\ \end{align}となります。最後の式から、\(a_n=0\quad(n\geq 5)\)が分かります。以上をまとめると \begin{align} (19)_{10}&=(a_4\times 2^4+a_3\times 2^3+a_2\times 2^2+a_1\times 2^1+a_0\times 2^0) \nonumber\\ &=(1\times 2^4+0\times 2^3+0\times 2^2+1\times 2^1+1\times 2^0) \nonumber\\ &=(10011)_2 \end{align}です。要するに、2で割ったあまりを書いていけばよいのです。よく使われるのは、以下のようにして計算します。 それぞれは、 \begin{align} (19)_{10}&=(10011)_2\\ (2003)_{10}&=(11111010011)_2 \end{align}に対応します。よく、内容を理解して、変換の練習をしてください。 |