★基数変換★


「基数」を単純に説明すると、桁上がりが発生する数と考えて良いと思います。

10進数の基数は10です。

9までは桁上がりしませんが、9に1を加算すると桁上がりして10になります。


同じように、2進数の基数は2です。

「基数変換」とは、10進数を2進数に変換したり、2進数を8進数に変換することです。

私たちは普段10進数を使っていますが、コンピュータ内部では2進数が使用されています。

ただ、2進数は非常に見づらいので、16進数を使った表現もよく使用されています。

今回は、10進数、2進数、16進数を中心に基数変換を勉強したいと思います。


進数の話」で書いたように、基本的な考え方が分かれば特に問題なく変換できます。

すでに、「進数の話」で、2進数や16進数を10進数に変換する方法は書きましたので、ここでは逆をやってみましょう。

まずは、10進数と2進数の基数変換を行ってみます。


・10進数 → 2進数


10進数「245」を2進数に変換します。

10進数の考え方は「進数の話」で書きましたが、

  1  (10の0乗)の位 が 5つ で   5
  10 (10の1乗)の位 が 4つ で  40
  100(10の2乗)の位 が 2つ で 200

これらの合計が「245」となります。

10の○乗と括弧書きをしましたが、この10が基数です。

2進数は基数が2ですから、

  1   (2の0乗)の位
  2   (2の1乗)の位
  4   (2の2乗)の位
  8   (2の3乗)の位
  16  (2の4乗)の位
  32  (2の5乗)の位
  64  (2の6乗)の位
  128 (2の7乗)の位
  256 (2の8乗)の位
  ・
  ・
  ・

と続いていきます。

10進数「245」を2進数に変換するために、2進数のどの「位」が何個必要かを考えます。

2進数で使える数字は「0」と「1」だけですから、何個必要かを考える場合、「0個」か「1個」かを考えれば良いです。

では、手順を追って少しずつ説明します。


まず、変換する10進数は「245」ですから、2進数「256の位」は必要ありませんね。

  1   (2の0乗)の位
  2   (2の1乗)の位
  4   (2の2乗)の位
  8   (2の3乗)の位
  16  (2の4乗)の位
  32  (2の5乗)の位
  64  (2の6乗)の位
  128 (2の7乗)の位
  256 (2の8乗)の位 が 0こ で 0

2進数「128の位」は1つ使えそうです。

  1   (2の0乗)の位
  2   (2の1乗)の位
  4   (2の2乗)の位
  8   (2の3乗)の位
  16  (2の4乗)の位
  32  (2の5乗)の位
  64  (2の6乗)の位
  128 (2の7乗)の位 が 1つ で 128
  256 (2の8乗)の位 が 0こ で   0

2進数「128の位」を使いましたから、残った10進数は「117」です。


残り「117」ですから、2進数「64の位」も必要ですね。

  1   (2の0乗)の位
  2   (2の1乗)の位
  4   (2の2乗)の位
  8   (2の3乗)の位
  16  (2の4乗)の位
  32  (2の5乗)の位
  64  (2の6乗)の位 が 1つ で  64
  128 (2の7乗)の位 が 1つ で 128
  256 (2の8乗)の位 が 0こ で   0

2進数「128の位」と「64の位」を使いましたから、残った10進数は「53」です。


残り「53」ですから、2進数「32の位」も必要です。

  1   (2の0乗)の位
  2   (2の1乗)の位
  4   (2の2乗)の位
  8   (2の3乗)の位
  16  (2の4乗)の位
  32  (2の5乗)の位 が 1つ で  32
  64  (2の6乗)の位 が 1つ で  64
  128 (2の7乗)の位 が 1つ で 128
  256 (2の8乗)の位 が 0こ で   0

これで、残った10進数は「21」になりました。


同じように必要な「位」に1を、必要でない「位」に0を入れていくと、最終的に次のようになります。

  1   (2の0乗)の位 が 1つ で   1
  2   (2の1乗)の位 が 0こ で   0
  4   (2の2乗)の位 が 1つ で   4
  8   (2の3乗)の位 が 0こ で   0
  16  (2の4乗)の位 が 1つ で  16
  32  (2の5乗)の位 が 1つ で  32
  64  (2の6乗)の位 が 1つ で  64
  128 (2の7乗)の位 が 1つ で 128
  256 (2の8乗)の位 が 0こ で   0

右側の10進数を全て加算すると、「245」となります。


10進数「245」は、2進数に変換すると「011110101」となりました。

10進数でも指定が無い限り数字の先頭のゼロは書かないように、2進数でも桁数の指定が無ければ数字の先頭のゼロは書く必要はありません。

ですから、「1111 0101」となります。


・10進数 → 16進数


次に10進数から16進数への変換を考えてみます。

同じように10進数「245」を16進数に変換します。

16進数は基数が16ですから、

  1    (16の0乗)の位
  16   (16の1乗)の位
  256  (16の2乗)の位
  4096 (16の3乗)の位
  ・
  ・
  ・

と続いていきます。


変換する10進数は「245」ですから、「256の位」や「4096の位」は必要ありません。

  1    (16の0乗)の位
  16   (16の1乗)の位>
  256  (16の2乗)の位 が 0こ で 0
  4096 (16の3乗)の位 が 0こ で 0

となります。


次の「16の位」は必要ですが、何個必要でしょうか?

16進数で使える数字は「0〜9」と「A〜F」までです。(「進数の話」参照)

  16×15=240

ですから、「15個」必要です。


  1    (16の0乗)の位
  16   (16の1乗)の位 が 15こ で 240
  256  (16の2乗)の位 が  0こ で   0
  4096 (16の3乗)の位 が  0こ で   0

10進数の残りは「5」になりますから、「1の位」は5個必要となります。


  1    (16の0乗)の位 が  5こ で   5
  16   (16の1乗)の位 が 15こ で 240
  256  (16の2乗)の位 が  0こ で   0
  4096 (16の3乗)の位 が  0こ で   0

右側の10進数を全て加算すると、「245」となります。


ここで、「16の位」は「15個」必要でしたが、16進数で「15」を表す記号は「F」です。

ですから、10進数「245」は、16進数に変換すると「F5」となります。


ここまで理解すれば、10進数を2進数、16進数に変換したり、2進数や16進数を10進数に変換することが出来るようになります。

2進数を16進数にしたり、16進数を2進数にするには、一旦10進数に変換することで可能です。


・簡単な考え方


もう少し簡単に基数変換を行う方法を紹介します。

10進数を2進数に変換する方法の1つに「2で割った余りを求める」という方法があります。

前の例と同じように、10進数「245」を2進数に変換してみましょう。


 245 ÷ 2 = 122 余り 1
 122 ÷ 2 =  61 余り 0
  61 ÷ 2 =  30 余り 1
  30 ÷ 2 =  15 余り 0
  15 ÷ 2 =   7 余り 1
   7 ÷ 2 =   3 余り 1
   3 ÷ 2 =   1 余り 1
   1 ÷ 2 =   0 余り 1

右側に出てきた「余り」を下から見てみると「1111 0101」となります。


この方法は何進数にでも適用できます。

16進数に変換してみましょう。

 245 ÷ 16 = 15 余り  5
  15 ÷ 16 =  0 余り 15 → 「F」

「余り」を下から見ると「F5」になります。


2進数と16進数の変換も10進数を媒介せずに行う方法があります。

10進数「245」は、16進数で「F5」、2進数で「1111 0101」です。

16進数「F5」の各桁の数字を個別に見てみると、

  F → 15
  5 →  5

となります。

それぞれの桁を個別に2進数「4桁」に変換すると、

  F → 15 → 1111
  5 →  5 → 0101

「1111 0101」になりました。

※以前、2進数を4桁ずつ区切るのは「見やすく」するため、と書きましたが、「16進数に直しやすい」という利点もあります。


ブラウザの戻るボタンで戻ってください。