「人間の数」から「コンピュータの数」へ変換する【基数変換】

基数変換


別の記事で10進数と2進数について触れました。なぜこの両者についてまとめたかというと、基数変換の説明の導入にするためです。ですから、まずはこちらの記事を読んでから本記事をお読みになることをお勧めします。

この記事では「基数」それ自体の説明から入り、そのあと基数変換について解説していきます。基数変換について早く知りたい方は、目次からリンク先へ飛ぶといいでしょう。

基数とは?


基数とは、その進数において基本となる数のことです。

10進数なら「10」が基数
2進数なら「2」が基数

そして、
8進数なら「8」が基数
16進数なら「16」が基数となります。


基数はその進数における「基本の数」ですが、このことから基数によって数が構成されていると説明できます。


下の図をご覧ください。


同じ「101.110」でも10進数では「101.110(ひゃくいってんいちいちぜろ)」ですし、2進数では10進数でいうところの5.75」です。

10進数の「101.110」の場合

100の位(10の2乗)と1の位(10の0乗)、小数点第1位(10の-1乗)、小数点第3位(10の-2乗)、これらをすべて足すことで構成されます。

2進数の「101.110」、つまり「5.75」の場合については、

4の位(2の2乗)と1の位(2の0乗)、小数点第1位(2の-1乗)、小数点第3位(2の-2乗)、これらをすべて足すことで構成されます。


つまり、それぞれの位の基数の累乗をすべて足し合わせることで数が構成されるというわけです。

基数が違えば数の「重さ」も異なる


10進数の場合は10が基数となり、この数を基本として10の累乗ごとに桁が上がっていったり下がっていったりします。

2進数の場合は2が基数となり、これも同様に2の累乗ごとに桁が上がっていったり下がっていったりします。

これを基数の「重み付け」といいます。

10進数と2進数
←右に行くほど重くなり、
左に行くほど軽くなる→


上の表から確認できる通り、基数が違えばそれぞの桁にかかる「重さ」も異なります。

たとえば10進数の「10」と2進数の「10」では、数の大きさが異なります。これらは同じ2桁の数なのですが、前者はそのまま「10(じゅう)」を表し後者は「イチゼロ」と読み、その実態は10進数の「2」です。

このように桁数が同じでも数字の大きさが異なります。これが基数によってかかる「重さ」がそれぞれ異なる理由です。

基数変換とは?


お待たせしました。ここまでは基数とその重み付けについて説明しましたから、ここからは本題である基数変換について具体的に解説していきます。

基数変換とは、ある進数を別の進数に変換することです。例えば10進数を2進数に変換するのは基数変換だといえます。

10進数を2進数に変換する【10進数→2進数】


ここでは10進数の「6.75」を2進数に変換してみましょう。

(1)重み付けを利用する方法


変換する数より小さい範囲でとり得る最大の基数の累乗を探します。この場合は4(2×2)です(つまり「6 > 4」)。

そして変換したい数をその累乗割り、その余りをさらに下位の累乗割る、これを割り算の答えが0になるまで繰り返します。

最初に4で割って
次に2で割って、
最後に1で割る。


これで整数部分が求まりました。小数部分も同様計算していけば求まります。


ちなみにマイナスの累乗は分数です。とりあえずプラスの累乗の逆数と考えれば大丈夫でしょう。


2の-1乗は1/2(0.5)
2の-2乗は1/4(0.25)
2の-3乗は1/8(0.125)

………といった具合です。


これで10進数の「6.75」を2進数の「110.110」に変換できました。

(2)基数を利用する方法


整数部分と小数部分とでは計算の方法が異なるため、これらを2つに分けて説明します。変換する数はここでも10進数の「6.75」としましょう。

整数部分

6.75の整数部分は「6」です。これを答え()が0になるまで割っていきます。


よって、赤枠部分から10進数の「6」は2進数の「110」だと分かりましたね。

ちなみにこの方法では、赤枠部分の下から順番にビットパターンを並べていきます。これは計算するごとに1の位、2の位、4の位、………と、下位から計算を進めていくためです。

小数部分

6.75の整数部分は「0.75」です。これを小数部分が0になるまで2で掛けていきます。


赤枠部分より10進数の「0.75」は2進数の「0.110」だと分かります。これで、この方法でも10進数の「6.75」から2進数の「110.110」に変換できましたね。

10進数を2進数に変換する【2進数→10進数】


ビットパターンに各位の基数の重みを割り当て、それらすべてを足し込んでいけば変換できます。

ここで再び冒頭の表を利用することにしましょう。

2進数
2進数の重み付けと
ビットパターン


上図の対応に基づいて2進数の「101.110」を10進数に変換します。
ここで用いるのは10進数の「5.75」です


これで2進数の「101.110」を10進数の「5.75」に変換できました。

2進数を8進数に変換する【2進数→8進数】


ここでは、

0110110010001101


というビットパターンについて考えてみましょう。


まず、このビットパターン(2進数)を3桁に区切ってから3桁それぞれを変換します。最後に変換した数を並べて完了です。

1桁あたり7を超えることはありませんから桁ごとに10進数に変換すると捉えても問題ないでしょう。

8進数に変換
8進数では「066215」


2進数を16進数に変換する【2進数→16進数】


ここでも先ほどと同じビットパターンで考えてみます。

0110110010001101


まずビットパターン(2進数)を4桁に区切ってから4桁それぞれを変換します。最後に変換した数を並べて完了です。

16進数ですから1桁あたり0~F(つまり15)をとりますね。

16進数に変換
16進数では「6C8D」


8進数や16進数を2進数に変換する【8進数/16進数→2進数】


8進数や16進数を2進数に変換するにはどうすればよいのでしょうか?

8進数16進数のいずれにおいても各位ごとに2進数に変換して0と1の羅列にすればいいのです。

ここでは図に載せませんが、ようするに2進数→8進数または2進数→16進数のときとは逆の操作をすればいいのです。

ちなみに「0~F(15)」までのビットパターン暗記しておくと2進数に変換する際の計算が楽になります。

8進数と16進数、そして2進数の相互関係


2進数と8進数、2進数と16進数との相互関係は、下の図によって明確に把握できると思います。8進数や16進数が2進数をコンパクトに表現する、その理由も一目瞭然ですね。

2進数と8進数、16進数の対応


8進数と16進数、そして2進数の相互関係は、対称的だといえます。2進数を、8進数または16進数に変換することができれば逆の計算も容易であることも、ここから確認できるはずです。





それでは、今回はここまでといたします。
最後までお読みいただきありがとうございます。


基数変換
最新情報をチェックしよう!