進法の変換

2進法で表された数を10進法の表記に変換したり、あるいはその逆方向に変換したりするにはどうすればよいか考えよう。

2進法から10進法への変換

第1の方法

  1101(2進) を10進に変換してみる。
  10進法では、下のケタから順に一のケタ、十のケタ、百のケタ、千のケタ…となっているが、
  2進法では、次のようになっている:

    2進の一番下のケタは 1のケタ
    次のケタは、        2のケタ
    その次は、          4のケタ
    その次は、          8のケタ
    …                 16 …
                       32
                       64
                      128

  ケタが進むごとに2倍になるから、下から n 番目のケタは 2 の (n-1) 乗のケタになっている。 

    1101(2進) は、1のケタに1がある
                  2のケタに0がある
                  4のケタに1がある
                  8のケタに1がある
    1+4+8 = 13
    よって、1101(2進) = 13(10進) であることがわかる。
    ケタ数が少ない時はこの方法で変換するのが楽。

第2の方法

    1101を1ケタずつ上から下に向かって書いてみる。

    1
    1
    0
    1

    次のような計算を行う:

            2進                             10進
              1 ←この1をそのまま右に書くと    1  ← この1を2倍して
              1 ←この1を足すと                3  ← この3を2倍して
              0 ←この0を足すと                6  ← この6を2倍して
              1 ←この1を足すと               13  ← これが答

これでうまく行く理由

  まず、1は2進でも10進でも1だから、

    1(2進)=1(10進)


  である。
  この両辺を2倍して1を足してみる。
  右辺については普通に2倍して足せばよろしい。
  左辺についてだが、2倍するには、2進法では左に1ケタずらせばよいので、結局、
  左に1ケタずらしたあと、1加えれば2倍して1加えたことになる。
  1を左に1ケタずらすと10(2進)、それに1加えると11だから、

    11(2進)=3(10進)

  となる。
  今度は両辺を2倍してみる。今度は左辺については左に1ケタずらすだけでよいので、

     110(2進)=6(10進)

  となる。同様にして、今度は2倍して1加えると 1100 + 1 で、

    1101(2進)=13(10進)

  になる。これで2進の1101を10進の13に変換できた。
  まとめると、次のようになる:

      最初は   1       1(2進)=1(10進)
      両辺×2+1      11(2進)=3(10進)
      両辺×2+0     110(2進)=6(10進)
      両辺×2+1    1101(2進)=13(10進)
               ↑
               この部分にタテに並んでいる数を横に並べかえると 1101。

  これを見ると、さきほど説明した2進10進変換と同じ計算になっている。

10進から2進への変換

2進表記に変換したときの各ケタの数字を求めることができればよい。 しかし、いきなり2進数について考えるのは難しいかも知れないので、 まず10進表記では各ケタの数字がどのようにして得られるかを考えてみる。

例として、213 という10進数を考える。213 の最下位は 3 だが、これは、213を10でわった余りである。 一方、最下位をのぞいた残り、つまり、21 は 213を10でわった商である。 このことからわかるように、10で割った余りと商とを考えることにより、数を最下位のケタの数とそれ以外とに分けることができる。 さらに、商 21 を再び10で割ってみると、余りが1で商が2となる。 このように、10で割って余りと商を求めることを繰り返すことにより、各ケタの数を下位から順々に求めて行くことができる。

                10で割った余り
          213 ─────────→ 3
           │
         商│
           ↓   10で割った余り
           21 ─────────→ 1
           │
         商│
           ↓   10で割った余り
            2 ─────────→ 2
           │
         商│
           ↓
            0

これと同じことを2進で考える。

再び 213 を例とする。 10で割るかわりに2で割って余りを求めることを繰り返せば、2進表記にした際の各ケタの数が求まるはずである。

・最下位を求める
213を2進で書いた時の最下位のケタは、213を 2で割った余りになるはず。 213は奇数だから、余りは1。よって、213を2進で書いた時の最下位は 1。
・下から2ケタ目を求める
213を2で割った商を求めると、106。(整数の範囲で割り算する。) 下から2ケタ目は、この数を2で割った余りになるはず。 106を2で割った余りは 0。よって、下から2ケタ目は 0。
・下から3ケタ目を求める
106/2 = 53。 53を2で割った余りは 1。よって 次のケタは 1。

以下同様に繰り返せば、すべてのケタが求まる。 商が0になるまで繰り返せば終了。


                2で割った余り
          213 ─────────→ 1
           │
         商│
           ↓   2で割った余り
          106 ─────────→ 0
           │
         商│
           ↓   2で割った余り

           53 ─────────→ 1
           │
         商│
           ↓   2で割った余り
           26 ─────────→ 0
           │
         商│
           ↓   2で割った余り
           13 ─────────→ 1
           │
         商│
           ↓   2で割った余り
            6 ─────────→ 0
           │
         商│
           ↓   2で割った余り
            3 ─────────→ 1
           │
         商│
           ↓   2で割った余り
            1 ─────────→ 1
           │                     ↑ここに並んだ数を下から順に
         商│                       ひろって並べると
           ↓                       11010101となる
            0 

よって、213(10進) = 11010101(2進)

上のような図を毎回描くのは大変なので、次のようにすればよい:

            213   奇数だから → 1
            106   偶数だから → 0
             53   ……同様……  1
             26                 0
             13                 1
              6                 0
              3                 1
              1                 1
                                ↑ここに並んだ数を下から順に
                                  ひろって並べると
                                  11010101となる

※注意: 下から順に拾うべき所で上から順にやってしまう人がよくいる。

上の手順は、以下のように図解することもできる:


        213 =       1 1 0 1 0 1 0 1
                    ↑                      ↑  ↑
                    └───────────┘  └─ 213を2で割った余り1
                        213を2で割った商106


        106 =       1 1 0 1 0 1 0
                    ↑                  ↑  ↑
                    └─────────┘  └─ 106を2で割った余り0
                        106を2で割った商53


         53 =       1 1 0 1 0 1
                    ↑              ↑  ↑
                    └───────┘  └─ 53を2で割った余り1
                     53を2で割った商26

        …以下同様。

上で示した手順のかわりに次のようにやってももちろん同じ事である:


            213   
  ÷2       106            余り 1
             53            余り 0
             26            余り 1
             13            余り 0
              6            余り 1
              3            余り 0
              1            余り 1
              0            余り 1       ← 商が0になるまで続ける!
                                ↑下から順に拾って並べると
                                  11010101

よって、213(10進) = 11010101(2進)

しかし、このようにする場合、注意が必要。間違って次のようにしてしまう人がよくいる:


            213   
  ÷2       106            余り 1
             53            余り 0
             26            余り 1
             13            余り 0
              6            余り 1
              3            余り 0
              1            余り 1
                                        ← 商が0になるまで続けていない!
                                ↑下から順に拾って並べると
                                  1010101 ← これはマズイ答。

例年、試験でこの間違いを多く見かける。