2進数,10進数,16進数の表現ルールと変換方法

コンピュータはデータを扱うときに0と1しか使うことができません.「いや,5とか7とか画面上に出てるじゃないか」と思う方もいるかもしれませんが,それは画面に表示させる際に変換しているだけで,コンピュータの中では0と1のみで表されているんですね.

この0と1だけで表現する方法を2進数といいます.

今回はコンピュータの基本中の基本,2進数について解説していきます.

まずは10進数から理解しよう

2進数の説明に入る前に,まずは私たちが普段使っている10進数について見ていきましょう.

10進数のルールは以下の通りです.

  • 0~9の10つの数字を使う
  • 各ケタが10になったら1ケタ繰り上がる

例えば79に1数字を足すとしましょう.すると,1の位が9+1=10となりますよね.10となったら1ケタ繰り上がるため,79+1=80となるわけです.当たり前のようですが,これをしっかり理解しておくことで2進数の理解もスムーズになります.

10進数は10になったら1ケタ繰り上がる

2進数のルールとは?

では続いて2進数のルールについて見ていきましょう.

10進数のルールは以下の通りです.

  • 0,1の2つの数字を使う
  • 各ケタが2になったら1ケタ繰り上がる

2進数では0と1のみしか数字を使わないわけです.例えば(10101)2 のように表現します.この括弧の右下の”2″は10進数と区別するためのもので,「基数」と言います.これ以降,2進数のときには”2″を,10進数のときには”10″を括弧の右下書くことにします.

2進数は2になったら1ケタ繰り上がる

2進数と10進数の変換方法

では10進数を2進数の表現に変換したい,なんてときにはどうすればいいのでしょうか?

実はこれも意外と簡単です.まずは10進数と2進数についてもう少し深く見ていきましょう.

例えば10進数での345について考えてみます.この345を式で表すと,

$(345)_{10} = 3\times10^2+4\times10^1+5\times10^0$

となります. $10^2$,$10^1$,$10^0$ などを各ケタの「重み」と言います.2進数のときにはこの重みの10が2に変わるわけです.

例えば,$(1011)_{2}$について考えてみましょう.

$(1011)_{2} = 1\times2^3+0\times2^2+1\times2^1+ 1\times2^0 = (11)_{10}$

と表すことができます.2進数は簡単な式を計算するだけで10進数にすぐ変換することができるんですね.

10進数を2進数にするには?

では逆に10進数を2進数に変換するにはどうすればいいのでしょうか?

こちらもやり方は簡単で,商が0になるまで2で割り続け,余りを並べるだけです.例えば$(21)_{10}$の場合はこんな感じで

2進数変換

と計算できて,2進数では $(10101)_{2}$ になります.

2進数で小数を表すには?

次に,2進数を使って小数を表現する説明に移りましょう.

小数も先ほどと同様に,「基数」や「重み」の考え方がベースになります.つまり,10進数での小数第一位は$10^{-1}$ ,小数第二位は$10^{-2}$ が重みになるわけです.例として $(21.73)_{10}$ で考えてみます.

$(21.75)_{10} = 2\times10^1+1\times10^0+7\times10^{-1} +5\times10^{-2} $

となります.2進数を10進数に変換したい場合,先ほどの説明とやり方は同じですが,10進数を2進数に変換したい場合,整数部と小数部に分けて考える必要があります

  • 整数部は先ほどと同じ
  • 小数部は逆に2を掛け,整数部に繰り上がったら1,繰り上がらなかったら0
  • 再び小数部に2を掛けて残りが0になったら終了

例えば $(21.75)_{10}$を考えてみると以下のようになり,

小数変換

$(21.75)_{10} = (10101.11)_{2}$ と表せるわけです.

他に8進数や16進数などもある

2進数や10進数の他にも8進数や16進数の考え方もあります.

8進数では2進数の3ケタ分を,16進数では4ケタ分を1ケタで扱えるという特徴がありますが,基数や重みなどの基本的な考え方は同じです.

ここではより特徴的な16進数について少し見てみましょう.

16進数は0から9の他に,アルファベットのAからFも使います.Aは10進数での10,Fは10進数での15だと考えます.いくつか例を見てみましょう.

$(21)_{16} = 2\times16^1+1\times16^0 = (33)_{10} $

$(1A)_{16} = 1\times16^1+10\times16^0 = (26)_{10} $

$(AF)_{16} = 10\times16^1+15\times16^0 = (175)_{10} $

といった感じです.

2進数の4ケタ分を16進数では1ケタで表す

さて,8進数では2進数の3ケタ分を,16進数では2進数の4ケタ分を1ケタで表すと言いましたが,その意味も例を見ながら理解しましょう.

$(21)_{16} = (33)_{10} = (10\ 0001)_{2} $

$(1A)_{16} = (26)_{10} = (1\ 1010)_{2} $

$(AF)_{16} = (175)_{10} = (1010\ 1111)_{2} $

2進数の表記は下の位から4ケタごとにスペースを空けています.これでわかったのではないでしょうか?

ご覧のように,2進数表記にした際の4ケタ分をひとまとまりとして,16進数では表記をしているということなんです.

コンピュータのデータを全て2進数表記で保存した場合には桁数が多くなりすぎてしまうため,同じデータを短い桁数で表現できる16進数が用いられることがあるんです.容量を節約するための工夫というわけですね.

コメント

タイトルとURLをコピーしました