電子計算機
第5回
|
電子計算機10進数と2進数(小数)2進数の小数の表現方法を学習します. 目次講義を始める前に本日の授業のテーマ本日の授業のテーマは,以下のとおりです.
本日の授業のゴールは、以下のとおり。
先週の復習
ビットと2進数2進数で数字を表す方法が理解できたと思います。小数や負の数の表現を学ぶ前に、ビットと2進数の関係について、説明をしておいたほうが良いでしょう。 以前、情報の単位として、ビットというものを示したでしょう。このビットと2進数の関係を示します。1ビットでは、2個の状態を表すことができます。2ビットでは4個の状態、3ビットでは8個の状態を表現できます。Nビットあると、2N個の状態を表すことができます。以前に学んだ通りです。 例えば、PICと呼ばれている1チップマイコンでは、図1に示すRB0~RB7のピンがビットに対応しています。これらの8個のピンにより、デジタル信号を入出力します。8本のピンを使っているので、8ビットです。したがって、28=256通りの状態を表すことが出来ます。 0—255の間の整数を出力する場合、以下のピンが各ビットを表します。
したがって、\((183)_{10}=(10110101)_2\) を出力する場合、各ピンの電圧は、
となります。5Vが2進数の1を表しています。 この例から分かるように、2進数の各桁は各ビット(bit 0, bit 1, bit 2, …)を表し、桁数は情報の量(単位:ビット)を表します。 小数の表現10進数での小数の表現を考えます。整数の場合と同様に、 \begin{align} (0.1235)_{10}=(1\times 10^{-1}+2\times 10^{-2}+3\times 10^{-3}+5\times 10^{-4}) \label{eq:2003} \end{align}と表現されます。小数点を境に、右側の指数部が -1, -2, -3 と 1 づつ減少していきます。これは、先に示した整数の場合と全く同じです。簡単ですね。 当然、 \begin{align} 10^{-1}&=\frac{1}{10^1}=\frac{1}{10}=0.1 \nonumber\\ 10^{-2}&=\frac{1}{10^2}=\frac{1}{100}=0.01 \nonumber\\ 10^{-3}&=\frac{1}{10^3}=\frac{1}{1000}=0.001 \\ &\vdots\nonumber\\ 10^{-N}&=\frac{1}{10^N} \nonumber\\ \end{align}は分かっていますよね。 基数の変換変換(2進数小数 → 10進数小数)2進数での少数の表記も、10進数の場合と同様です。だから、2進数少数を10進数少数に変換するのは簡単です。たとえば、 \begin{align} (0.10101)_2 &= (1\times 2^{-1}+0\times 2^{-2}+1\times 2^{-3}+0\times 2^{-4}+1\times 2^{-5})\nonumber\\ &=(1\times 0.5+0\times 0.25+1\times 0.125+0\times 0.0625+1\times 0.03125)_{10}\nonumber\\ &=(0.5+0.125+0.03125)_{10}\\ &=(0.65625)_{10}\nonumber\\ \end{align}となります。当然、 \begin{align} 2^{-1}&=\frac{1}{2^1}=\frac{1}{2}=0.5 \nonumber\\ 2^{-2}&=\frac{1}{2^2}=\frac{1}{4}=0.25 \nonumber\\ 2^{-3}&=\frac{1}{2^3}=\frac{1}{8}=0.125 \\ &\vdots\nonumber\\ 2^{-N}&=\frac{1}{2^N} \nonumber\\ \end{align}は分かっていますよね。 変換 (10進数小数 → 2進数小数)つぎに逆を考えましょう。たとえば、先ほどの 0.65625 を \begin{align} (0.65625)_{10}=(a_1\times 2^{-1}+a_2\times 2^{-2}+a_3\times 2^{-3}+a_4\times 2^{-4}+a_5\times 2^{-5}+\cdots) \end{align}と表現したいのです。それぞれ、\(a_n\)を求めなくてはなりません。両辺 ×2 を実行してみましょう。 \begin{align} (1.3125)_{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} (1)_{10}&=a_1 \\ (0.3125)_{10}&=(a_2\times 2^{-1}+a_3\times 2^{-2}+a_4\times 2^{-3}+\cdots) \nonumber \end{align}となります。\((1)_{10}=(1)_2\)なので、\(a_1=1\)となります。同じように、残りの小数部分を 2 倍すると、 \begin{align} (0.625)_{10}=(a_2\times 2^0+a_3\times 2^{-1}+a_4\times 2^{-2}+a_5\times 2^{-3}+\cdots) \end{align}となります。同様に、整数部、および小数部同志は等しいので、 \begin{align} (0)_{10}&=a_2 \\ (0.625)_{10}&=(a_3\times 2^{-1}+a_4\times 2^{-2}+a_5\times 2^{-3}+\cdots) \nonumber \end{align}となります。したがって、a2=0です。次々に、同じ計算を進めると、 \begin{align} &\begin{cases} (1.25)_{10}=(a_3\times 2^{0}+a_4\times 2^{-1}+a_5\times 2^{-2}+a_6\times 2^{-3}+\cdots)\nonumber\\ \qquad\Downarrow \nonumber\\ (1)_{10}=a_3\nonumber\\ (0.25)_{10}=(a_4\times 2^{-1}+a_5\times 2^{-2}+a_6\times 2^{-3}+\cdots)\nonumber\\ \end{cases}\\ \nonumber\\ &\begin{cases} (0.5)_{10}=(a_4\times 2^{0}+a_5\times 2^{-1}+a_6\times 2^{-2}+a_7\times 2^{-3}+\cdots)\\ \qquad\Downarrow \\ (0)_{10}=a_4\\ (0.5)_{10}=(a_5\times 2^{-1}+a_6\times 2^{-2}+a_7\times 2^{-3}+\cdots)\\ \end{cases}\\ \nonumber\\ &\begin{cases} (1.0)_{10}=(a_5\times 2^{0}+a_6\times 2^{-1}+a_7\times 2^{-2}+a_8\times 2^{-3}+\cdots)\nonumber\\ \qquad\Downarrow \nonumber\\ (1)_{10}=a_5\nonumber\\ (0.0)_{10}=(a_6\times 2^{-1}+a_7\times 2^{-2}+a_8\times 2^{-3}+\cdots)\nonumber\\ \end{cases} \end{align}最後に、小数部がゼロとなったので計算は、完了です。以上をまとめると \begin{align} (0.65625)_{10}&=(a_1\times 2^{-1}+a_2\times 2^{-2}+a_3\times 2^{-3}+a_4\times 2^{-4}+a_5\times 2^{-5}+\cdots)\nonumber\\ &=(1\times 2^{-1}+0\times 2^{-2}+1\times 2^{-3}+0\times 2^{-4}+1\times 2^{-5})\\ &=(0.10101)_2 \end{align}です。要するに、小数部を2倍して、その整数部を書いていけばよいのです。 よく使われるのは、図5のようにして計算します。2倍して、整数部を書き出して、小数部を再度2倍します。これを繰り返すと、10進数小数が、2進数小数に変換できます。 10進数の0.1は循環小数ではありませんが、2進数にすると、 \begin{align} (0.1)_{10}=(0.000110011001100110011\cdots)_2 \end{align}と循環小数になります。通常は、途中まで(必要な精度まで)で、計算を打ち切ります。 |