検索

キーワード


2進数・8進数・10進数・16進数などの基数変換と重み

  • 公開日:2021-03-25 09:31:49
  • 最終更新日:2021-03-26 10:06:06
2進数・8進数・10進数・16進数などの基数変換と重み

基数とは、数値を扱う際に「基となる数字の個数(ひとつの桁を表すのに何個の数字が扱われるか)」のことを指します。


この記事を読むことで、

・進数の変換方法(重みを使った方法・割り算と掛け算での方法)

・桁が持つ重みについて


以上のことが分かります。


また、基数・進数・桁の重みについてより詳しく知りたい方は、

基数とは?IT系国家試験の基本知識、2進数について解説!

をご一読ください。基数についてより知ることができます!




基数変換

数学の画像

基数変換とは、2進数を10進数に変換したり、16進数を10進数に変換したり、現状において必要な進数に変換する方法です。




基数変換をする理由

どうして置き換える必要が出てくるのでしょうか?


一般的に海外の方と会話をする際、その方が分かる言語(例えば、英語)で話さなければ、会話は成立しません。そのため、英語を習得したり、翻訳機を使ったりして、なんとか話を伝える必要があります。


コンピュータも同じで、コンピュータで扱う数値は、2進数で表される「0・1」のみです。

そのため、私たちは2進数で情報のやり取りをする必要があるのです。


しかし、私たちが一般的に使用する数値は10進数です。

そのため、コンピュータとのやりとりでは、2進数を10進数に、または10進数を2進数に変換しないと、数値が分かりません。


そこで、基数変換が必要になるのです。




基数と桁の「重み」

基数変換の前に、重要な各基数の桁が持つ「重み」について解説します。


まず、2進数の桁上がりを見てみましょう。


2進数の桁上がり画像


1桁目で2個(0・1)の数字を全て使い切ると、1の次に当たる数字が2進数には存在しないため、桁上がりをし「10」となります。

桁上がりをすると、また1桁目から数字が増えていきます。

また、2桁目でも1番大きな数字の1までを使い切ったので、桁上がりをし「100」となります。


この桁上がりする際、ある規則的な値が出てくるのですが分かるでしょうか?


答えは、「倍々となって増えていく」です。


2進数の重み画像


1桁目は2の0乗(2⁰)

2桁目は2の1乗(2¹)

3桁目は2の2乗(2²)

4桁目は2の3乗(2³)

5桁目は2の4乗(2⁴)

6桁目は2の5乗(2⁵)


というように、桁が上がるごとに

1 → 2 → 4 → 8 → 16 → 32


と倍々になっているのです。


この倍となっていく数字が、2進数が持つ各桁の「重み」といいます。


つまり、桁ごとに「2の(桁数‐1)乗」を行った数値で重みがわかるのです。



10進数の各桁の重みも見てみましょう。


10進数の重み画像


1 → 10 → 100 → 1000 → 10000 → 100000


桁が上がるごとに倍々になっていっているのが分かります。


また、桁ごとの重みは「10の(桁-1)乗」を行った数値になっています。


※1以下の数値については、倍々で小さくなっていきます。

 2進数の場合、1/2→1/4→1/8…と倍々で小さくなっていきます。




n進数から10進数への基数変換

数学の画像

重みについて理解できたところで、n進数から10進数への基数変換をしてみましょう。


n進数のnには、変換したい元の基数が入ります。

nには、2進数や8進数の2や8が入るということです。


n進数を10進数へ変換するには、

各桁の重みを掛け、結果を足すことで10進数への変換ができます。




2進数から10進数への基数変換

2進数「1011.101」を10進数に変換してみます。


2進数から10進数への基数変換


2進数「1011.101」は各桁の重みを掛けた結果

8 + 0 + 2 + 1 + 0.5 + 0 + 0.125

=11.625

10進数「11.625」となり、

これで、2進数から10進数への基数変換ができました。


8進数・16進数なども、2進数と同じ方法で10進数への基数変換が可能です。


<8進数>

8進数の重み画像


8進数「1725.63」を重みを使って10進数へ変換すると


(512×1)+(64×7)+(8×2)+(1×5)+(0.125×6)+(0.015625×3)

=512   +  448  +  16  + 5  +  0.75  + 0.046875

=981.796875


10進数「981.796875」となります。



<16進数>

16進数の重み画像


16進数「3D5.29」を重みを使って10進数へ変換すると

(256×3)+(16×13)+(1×5) + (0.0625×2)+(0.00390625×9)

=768  + 208   + 5  +  0.125  + 0.03515625 

=981.16015625


10進数「981.16015625」となります。



n進数を10進数へ基数変換する場合、


①各桁の重みをかける

②かけて出た結果を足す


以上の2工程を経て10進数への変換をすることができます。




10進数からn進数への基数変換

数字の画像


10進数からn進数への基数変換には2つの方法があります。


・各桁の重みを使った変換方法

・割り算と掛け算を使った変換方法




各桁の重みを使った変換方法

基数の各桁が持つ「重み」を使って行う方法について解説します。


前の項目では、n進数から10進数への変換を、各桁の重みを「掛け算」して行いました。

逆の10進数からn進数への変換は、各桁の重みを順に「割り算」します。


先ほど2進数から10進数への変換を行った際に出た10進数「11.625」を2進数に変換してみます。


重みを使う変換方法


整数部
① 11 ÷ 8 = 1 … 3
②  3 ÷ 4 = 0 … 3
③  3 ÷ 2 = 1 … 1
④  1 ÷ 1 = 1 … 0

小数部
⑤ 0.625 ÷ 0.5 = 1 … 0.125
⑥ 0.125 ÷ 0.25 = 0 … 0.125
⑦ 0.125 ÷ 0.125 = 1 … 0


2進数「1011.101」


整数部は整数部分各桁の重みを使って割り算を、

小数部は小数部分各桁の重みを使って割り算をそれぞれ順に計算していきます。

2進数部分には、商を入れます。


これで、10進数から2進数への各桁の重みを使って変換が出来ました。




割り算と掛け算を使った変換方法

変換したい基数を使って、整数部は割り算・小数部は掛け算をして行う方法について解説します。


ここでも、先ほどと同じ数値の10進数「11.625」を2進数に変換してみます。


割り算と掛け算を使う方法


整数部
① 11 ÷ 2 = 5 … 1
②  5 ÷ 2 = 2 … 1
③  2 ÷ 2 = 1 … 0
④  1 ÷ 2 = 0 … 1

小数部
⑤ 0.625 × 2 = 1.25
⑥  0.25 × 2 = 0.5
⑦   0.5 × 2 = 1.0


2進数「1011.101」


整数部は余りを④→③→②→①と降順

小数部は整数になった部分を⑤→⑥→⑦と昇順にそれぞれ記載します。


これで、10進数から2進数へ割り算と掛け算を使って変換することが出来ました。




2進数と8進数・16進数の基数変換

勉強の写真


8進数と16進数は、2進数との変換がしやすい進数です。


8進数は2³(2の3乗)

16進数は2⁴(2の4乗)


となっています。


8進数は3桁で、16進数は4桁でそれぞれを区切って変換をしていきます。




2進数と8進数の基数変換

2進数「1011.101」を8進数に変換してみましょう。


2進数から8進数への変換


①3桁ごとに区切る(3桁に満たない部分には“0”を補う)

②区切った単位ごと、それぞれを8進数に変換する

③8進数に変換した数値を並べる


2進数、3桁までで表せる最大値は、

2進数「111」=10進数「7」

となります。


8進数は0~7の数値を扱うので、2進数を3桁に分けることで、8進数となるのです。


反対に、8進数を2進数に変換する場合は

各桁を2進数の3桁に分けることで変換ができます。


8進数から2進数への変換




2進数と16進数の基数変換

2進数「1011.101」を16進数に変換してみましょう。


2進数から16進数への変換


①4桁ごとに区切る(4桁に満たない部分には“0”を補う)

②区切った単位ごと、それぞれを16進数に変換する

③16進数に変換した数値を並べる


進数、4桁までで表せる最大値は、

2進数「1111」=10進数「15」

となります。


16進数は0~9と A ~ F の数値を扱うので、2進数を4桁に分けることで、16進数となるのです。


反対に、16進数を2進数に変換する場合は

各桁を2進数の4桁に分けることで変換ができます。


16進数から2進数への変換




まとめ

基数変換について、分かったでしょうか?

変換方法にはいくつかあるので、自身のやりやすい方法を覚えておくと良いでしょう。


【著者】

伊藤

Javaを研修で3か月学んだ、駆け出しのエンジニアです。
現在は、ベンダー資格を取得するため、勉強を日課にできるよう努力中です。

よく読まれている記事