コンピュータはデータを扱うときに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進数では $(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進数が用いられることがあるんです.容量を節約するための工夫というわけですね.
コメント