熊本大学大学院教授システム学専攻
目次:
【第1回】はじめに:OSの基本動作とファイルシステム
第1章
第2章
第4章
第5章
第6章

十進法と二進法

【本節の目的】
PCの世界で避けては通れない二進法について復習することです。
(今後も、二進法に関わる章を時々設けて行く予定です。)

十種類の文字(数字)で数を表わす世界

数字を書けるようになった子どもの時のことを思いだしてみましょう。 三個物があると、何の疑いもなく「3」と書き、5個あると「5」と書きました。 ところが、十個物があると「じゅう」と呼ぶ(数える)ことはできましたが、 自然に「10」と書くことができたでしょうか?

我々は、通常0?9までの十種類の文字(いわゆる数字)だけで数を表現します。 この節では、どのようにして十種類の文字(数字)だけで、 十以上の数を表現するか(しているか)について良く考えてみましょう。

この節では、数を表わす文字(数字)は、0~9までの十種類しか無いとします。 (そのような世界に住んでいると考えて下さい。)

以下のように9までは、問題なく数を表現できます。

ところが、文字(数字)は、十種類しかありませんので、9を超えると、 表現すべき文字が無くなってしまいます。

(例えば「十(じゅう)」のように)9+1を表わす文字(数字)を作れば良いのですが、 十種類の文字(数字)で表現することにしていますので、 それ以外の文字を使うのはルール違反です。

そこで、9より1大きい数(これは、利用できる文字の数と同じです)を一塊(ひとかたまり)として 「10」(「いち・れい」と読む)と、 表わすことにします。
(注意) 「じゅう」ではなく、必ず「いち・れい」と読んで下さい。

この「10」は、9より1大きい数を表わす塊が1つで、 0から9までの数を表わすことのできる部分が 0(何もない)と解釈することができます。
すると、「10」が2つあれば「20」と書くことができますし、 「10」が3つと単体(図ではリンゴ)が2あれば「32」と書くことができます。 (図では、3と2ですね。)

更に「10」の数 (図の袋の数)が9より多くなったら、 「10」が「10」個あることを表わす「100」(「いち・れい・れい」とよむ) を導入することで(図では箱で表わしている)、 それ以上の数も数えられるようになります。

このように、0から9までの十種類の文字(数字)で、 数を数える方法を「十進法」と呼びます。
また、文字の種類の数(より正確には、1桁で表わすことできる数の種類)を 「基数」と呼びます。

我々の生活では、十進数を用いることが多いので、十進数には、 各桁(塊)に名前がついています。先の図でいうと、「袋」は「十(じゅう)」と、 「箱」は「百(ひゃく)」と呼ばれます(知っての通りです)。 ですから、十進の世界で表現した「1(箱)3(袋)6(個)」は、 「百三十六」と呼びます。


十種類より少ない種類の文字(数字)で数を表わす世界では?

それでは、もし、0?3までの四種類の文字(数字)しかない世界では、 どのように数を数えるのでしょうか?

0から9までの十種類の数字がある世界(十進法)と同じ考え方で、 数えることができます。(四進法)
   (ただし、基数が4ですので、袋や箱が小さいですよ。)

二進法

同様にして、0と1の二種類の文字(数字)しかない世界でも、 数を数えることができます。

ただし、基数が二ですので、袋や箱はもっと小さいですよ。(二進法)


十種類より多い種類の文字(数字)で数を表わす世界では?

時間で使う十二進法、六十進法

時間は、十二進法や六十進法が使われますね。ただし、この場合、 数字は通常の十進法の0から9までが使われますので、少し複雑ですね。

例えば、59分+1分が1時間となり、分を1桁で表わせなくなってます。 もし、0から59までをすべて1文字(1桁)で表現できたら、時間の計算は、 もっとスッキリするでしょうね。

十六進法

PCの世界では、十六進法が使われる場合があります。
何進法でも考え方は同じなのですが、十六進法は、 十二進法や六十進と異なり、十六種類の文字を使って表わします。

0から9までは、通常の数字を使い、それ以上は、aからfを用います。 十進の「10」が十六進では「a」と表わされ、 十進の「14」が十六進では「e」と表わされます。


ところで、「累乗」って憶えてますか?

累乗(るいじょう)というのは、 ある一つの数同士を繰り返し掛け合わせるということ、 あるいはそれによって得られる数のことです。

n は、Aを n 回掛け合わせものと定義し、 これを Aの n 乗(じょう)と呼びます。
例えば、74 は、 7を4回掛け合わせた 7×7×7×7 を表わし、 7の4乗と呼びます。

2 は、A × A を表わしますが、 1 (Aの1乗) は、A そのものを表わしています。

それでは、A0 (Aの0乗) は、何を表わすでしょう? これは、1(いち) になります。Aが0を除くどんな数(正確には実数)であっても、 必ず 1 になります。これは、そのように定義してあると思ってもらっても結構です。 もう一度書きますが、 Aの値に関係なく(A=0は除く)、 0 = 1 です。


二進法と十進法の相互変換 (基数変換)

N進法の世界で生きている人が、そのN進法のみで生活できるなら、 何の問題もないのですが、お互いの変換が必要になることがあります。

我々は、十進の生活に慣れていますので、 PCの得意な二進法や十六進法で表わされた数は、ピンときませんし、 逆に、我々の考え得ている十進法の数を、 二進法や十六進法で表わさなければならないことがあります。

ここで、これまでは、N進法しか扱わないそれぞれの世界での中だけで、 考えていましたので問題は無かったのですが、 複数の基数の数を同時にあつかうとなると注意が必要です。 単に「101」と書くと、十進の「101」(いわゆる「百一」)なのか、 「二進」の「101」(十進で表わすと「五」)なのか区別がつきません。

そこで、今後は、基数を右下に括弧で書くことにします。 例えば、十進の「101」は「101(十)」と、 二進の「101」は「101(二)」と表わすようにします。 また、何も書いてなかったら十進法の記述だと解釈して下さい。

先に二進法の説明で使った下図を例にして、その変換方法を考えてみましょう。



◎ 十進法で表わされた数を、二進法で表わすには、 以下のようにすれば良いことが分ります。
     (上図の矢印方向の変換です。)

  1. まず、基数(袋)でまとめた(割り算した)余りを求めます。 すると1桁め(リンゴ単体)の数がわかります。


  2. 次に、基数(袋)でまとめたものを、更に基数個(箱)でまとめます。 このときの余りが、2桁目(余った袋)の数です。 (上図では、余った袋はありませんね。)


  3. 以下同様に、基数毎にまとめて余りを求めていくと、 下位の桁から順に求めることができます。
  4. まとめるものが無くなったら(商が0になったら)変換は終りで、 そのときの余りが、最上位の桁になります。

    (例 1)
    具体的な例として、
      「 十進法で表わされた 434 (四百三十四) を、 二進法で表わす 」
    ことを考えます。
  • 十進法で表わされた数を、N進法で表記するには、 上の説明のように、 十進表記された数をNで割りその余り順に求めて行けば良いので、 以下のように計算できます。ただし、ここでは、二進法で表わすので、 N=2 となります。(2で繰り返し割って行きます。)

  •       2)434
          2)217 … 0    (2進表記の最下位)
          2)108 … 1    (2進表記の下位から2桁目)
          2) 54 … 0    (2進表記の下位から3桁目)
          2) 27 … 0    (2進表記の下位から4桁目)
          2) 13 … 1    (2進表記の下位から5桁目)
          2)  6 … 1    (2進表記の下位から6桁目)
          2)  3 … 0    (2進表記の下位から7桁目)
          2)  1 … 1    (2進表記の下位から8桁目)
              0 … 1    (2進表記の最上位(9桁目)) 
  • ですから、十進法で表わされた 434 (四百三十四) を 二進法で表わすと、
      「110110010」
    となります。

◎ 二進法で表わされた数を、十進法で表わすには、 以下のようにすれば良いことが分ります。
     (上図の矢印と逆方向の変換です。)
  • 二進法で表わされたそれぞれの桁の数は、下位から順に、 以下の重みがあります。
    1. 基数二の零乗 (一)(何にも入らないリンゴの個数)
    2. 基数二の一乗 (二 (1袋の中のリンゴの個数))
    3. 基数二の二乗 (四 (1箱の中のリンゴの個数))
    4. 基数二の三乗 (八)
    5. ...
  • ですから、 二進法で表わされたB (二) (= ...B3 B2 B1 B0 )を、 十進法のD (十)に変換するのは簡単で、

    D (十) = ... +  B3×23  +  B2×22  +  B1×21  +  B0×20

    のようにすれば変換できます。

    上の図のでは、B (二)=101ですので、 それを十進法で表示した D (十)は、

    D (十) =  1×22  +  0×21  +  1×20 = 4 + 0 + 1 = 5

    のように求めることができます。


    (例 2)
    具体的な例として、(例 1)の結果を使い、
      「 二進法で表わされた 110110010 を、 十進法で表わす 」
    ことを考えてみましょう。
  • N進法で表わされた数を、十進法で表記するには、 上の説明のように、 各桁の重みを十進表記し、それぞれの桁をその重みに掛け合わせ、 すべてを可算すれば良いので、以下のように計算できます。 ただし、ここでは、二進法で表わされた数を十進で表わすので、 下位から n 桁めの重みは、2n-1 となります。

  •   ×28 + ×27 + ×26 + ×25 + ×24 + ×23 + ×22 + ×21 + ×20
    = 256 + 128 + 0 + 32 + 16 + 0 + 0 + 2+ 0
    = 434
  • ですから、二進法で表わされた 110110010 を、 十進法で表わすと、
      「434」
    となります。これで、 (例 1)で、十進法で表わしたものに戻ることがわかります。

【演習 11】

自分の学生番号の下2桁を十進2桁だとして、二進表示に変換しなさい。 ただし、2桁の先頭が0の人(例えば、051-M8905の人)は、 学生番号の下3桁を十進3桁だとして (例えば、051-M8905の人は、905)、 二進表示に変換しなさい。


(回答例)
       
    054-T3298   総情 先太

1. 98 (十)  ==>   1101110 (二) 
(ただし、上の回答例の計算は、わざと間違っていますので、 98 の人もちゃんと計算して下さい。)
Copyright Kenichi Sugitani and Eri Hayashi 2005, All Rights Reserved