電子計算機
第6回
|
電子計算機2, 8, 10, 16進数2, 8, 10, 16進数の相互の変換方法を学びます. 目次講義を始める前に本日の授業のテーマ本日の授業のテーマは,以下のとおりです.
本日の授業のゴールは、以下のとおり。
先週の復習
表現今まで学習した通り、コンピューターの動作は2進数で表現されます。しかし、2進数だけで、それを記述すると、0と1の並びが非常に多くなって、間違いやすいし煩雑です。そこで、2進数を3桁ずつ区切った8進数や、4桁ずつ区切った16進数が使われます。 コンピューターの内部では、1バイト(= 8ビット)毎に処理されることが多いので、8進数よりは16進数が使われることのほうが多いです。8ビットだと2進数の8桁なので、16進数だと2桁で済みます。一方、8進数だと、困った問題が生じます。 1バイトを1桁で表現するともっと良いのですが、256進数となり、256文字必要で、ちょっと人間には、無理があります。 数の表現今までの学習から、8進数や16進数の表現は理解していることと思います。もう一度、基数と底の関係を示します。そして、数の関係も示しておきます。 重要なことは、8進数の場合、7に1を加えると、桁上がりが生じ10になることです。同様に16進数の場合、Fに1を加えると、桁上がりが生じ10になります。
基数の変換変換 (8 or 16進数 → 10進数)10進数への変換方法の前に、数の表記方法について、復習しましょう。これを理解していると、これらの変換は簡単です。例えば、教科書の中にある\((376)_{10}\)を考えましょう。10進数の 376 の表記はどのような意味があるのでしょうか? これは、次のよう意味がありましたね。 \begin{align} (376)_{10} = (3\times 10^{2}+7\times 10^{1}+6\times 10^{0})_{10} \label{eq:376_10} \end{align}括弧の下の 10 は、10進法の意味です。非常に簡単です。これさえ、分かれば基数の変換なんか簡単です。数字の並ぶ順序が重要です。それでは、手始めに8進数を10進数に変換してみましょう。この表現は \begin{align} (376)_8 &= (3\times 10^{2}+7\times 10^{1}+6\times 10^{0})_8 \nonumber\\ &= (3\times 8^{2}+7\times 8^{1}+6\times 8^{0})_{10}\label{eq:376_8}\\ &=(3\times 64+7\times 8+6\times 1)_{10}\nonumber\\ &=(254)_{10} \nonumber\\ \end{align}です。今までのプリントでは、\eqref{eq:376_8}式の第1行の左辺の下添字が8の式を飛ばしていたと思います。正確にはこのように書くべきでしょう。\eqref{eq:376_10}式との対応も非常に良いので、満足できます。そして、第2行で10進数に変換するので、ここから下添字を10とすべきでしょう。いままで、少しすっきりしないところが有ったのですが、これで満足です\(^o^))/。 同じことを16進数で、やってみましょう。 \begin{align} (376)_{16} &= (3\times 10^{2}+7\times 10^{1}+6\times 10^{0})_{16} \nonumber\\ &= (3\times 16^{2}+7\times 16^{1}+6\times 16^{0})_{10}\label{eq:376_16}\\ &=(3\times 256+7\times 16+6\times 1)_{10}\nonumber\\ &=(886)_{10} \nonumber\\ \end{align}\eqref{eq:376_10} — \eqref{eq:376_16} 式まで、調和が取れていて非常に良いです。 2進数と 8, 16進数の関係以前、2進数の桁数が情報量であるビット数を表すことを言ったと思います。8進数や16進数の場合について、2進数と比較しながら、その様子を図1に表します。\(8=2^3\)であることから、2進数の3桁ずつ区切り、その値を8進数で示せば、8進数の表現になります。16進数の場合も同様です。したがって、8進数の1桁は3ビットを表し、16進数の1桁は4ビットを表します。 2進法から、8や16進法に変換することは、簡単であることが分かったでしょう。なにも、これは整数に限ったことではありません。小数でも同様に成り立ちます。証明は、以下の通りです。ある任意の小数をxとして、その範囲を 0 < x < 1 とします。この x を2進数の表現から、3桁ずつ区切り8進数の表現になることを示します。 \begin{align} (x)_2 &= (a_1\times 10^{-1}+a_2\times 10^{-2}+a_3\times 10^{-3}+a_4\times 10^{-4}+a_5\times 10^{-5}+\cdots)_{2} \nonumber\\ &= (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)_{10}\\ &= ([4a_1+2a_2+a_3]\times 2^{-3}+[4a_4+2a_5+a_6]\times 2^{-6}+\cdots)_{10}\nonumber\\ &= ([4a_1+2a_2+a_3]\times 8^{-1}+[4a_4+2a_5+a_6]\times 8^{-2}+\cdots)_{10}\nonumber\\ \end{align}\(4a_1+2a_2+a_3\) は、0以上7以下の整数であることは明らかなので、証明は終わりです。この結果を用いた例を図2に示します。16進数の場合も、まったく同じです。 相互の変換 (2, 8 , 10, 16進数)2, 8, 10, 16 進数の相互の変換について考えましょう。以前の授業で、2進数と10進数との変換はどちらの方向でも簡単であることを示しました。本日の授業で、8及び16進数を10進数に変換する方法を示しました。また、先ほど2進数から8及び16進数への変換が簡単であることも示しました。一方、その逆、8及び16進数から2進数への変換も簡単です。8進数を構成している数字を(1, 2, 4)の和で表すことにより、2進数に簡単に変換できます。16進数も同様で、(1, 2, 4, 8) の和で表すことにより、2進数に変換できます。例えば、16進数から2進数への変換は、図3のように行います。 残りは、10進数を8及び16進数に変換することです。人間にとって少しめんどくさいですが、2進数同様に、8や16で割っていって、その余りから計算する方法もあります。例えば、図4の左のような方法です。一旦、2進数に変換して、それを16進数に変換する方法もあります(図4の右)。与えられた問題によって、計算が楽なほうを用いればよいでしょう。 今まで、学習してきた2,8,19,16進数の基数の変換方法を図5に示しておきます。本当は、基数はどれも平等なので、同じテクニックで変換できるはずですが、10進数になれた人間には、状況によって、得手、不得手があります。 |