2進数とは 〜10進数との関係〜
2進数とは0と1で出来ていることは、ここまでの講義を受講された方はお分かりのことだと思います。
そろそろコンピュータ寄りの内容にしていきましょう。
いきなり結論ですが、現在一般的に使用しているコンピュータは0と1しか使えません。
究極な2進論者です。
じゃあ、文字や画像や数字の「ー」はどうするんだ?という疑問が出てくれば、筆者は嬉しいです。
「それでもコンピュータは0と1しか使えない」
ガリレオの名ゼリフのようにはいきませんが、これは絶対の制限なのです。
しっかりと覚えておいてください。
そろそろ本題です。
電卓もコンピュータです。しかも0と1しか使えません。
しかし、10進数の計算をすることができます。
実は2進数と10進数はお互いに変換することができます。(一部を除いては・・・)
この作業を基数変換と言います。
ますは、2進数から10進数の変換。
ある2進数の数字を1101bとします。
bとは、2進数の数字であると、わかりやすくするための記号です。コンピュータの中では使用されません。
あくまで、人が10進数と間違えないようにする記号です。
先ほどの数字を10進数に変換します。
- 1桁目に1を掛けます。
- 2桁目に2を掛けます。
- 3桁目に4を掛けます。
- 4桁目に8を掛けます。
- 上4つの計算で出た数字を足します。
これで10進数の数字になります。
つまり、(1x1)+(0x2)+(1x4)+(1x8)=13です。
1011bは13なのです。
4ビットの2進数をすべて10進数にしたものが以下の表です。
- 0000b = 0
- 0001b = 1
- 0010b = 2
- 0011b = 3
- 0100b = 4
- 0101b = 5
- 0110b = 6
- 0111b = 7
- 1000b = 8
- 1001b = 9
- 1010b = 10
- 1011b = 11
- 1100b = 12
- 1101b = 13
- 1110b = 14
- 1111b = 15
5ビット以上の2進数はどうやって変換すればよいのでしょうか?
さきほどの変換方法を見ると、1つ桁が増えると2を掛ける数が1つ増えることが分かります。
「n桁目の変換には2の(nー1)乗を掛ける」 (nは1以上の数字)
と言うのが正しいです。
5桁目であれば2の4乗となり、2x2x2x2=16です。
ちなみに0乗は1です。
これだけ覚えておけば、2進数から10進数への変換はできます。
では、10進数から2進数の変換です。
小さな数であれば、上の変換表を見て変換することも出来ますが、大きな数字の場合どうでしょうか?
この様な場合、割り算をして変換を行います。
たとえば、234を2進数に変換してみましょう。
元の10進数の数字を、0になるまでひたすら2で割ります。その時の余りを記録します。
234÷2=117 (余り0)
117÷2= 58 (余り1)
58÷2= 29 (余り0)
29÷2= 14 (余り1)
14÷2= 7 (余り0)
7÷2= 3 (余り1)
3÷2= 1 (余り1)
1÷2= 0 (余り1)
この式の余りの部分をしたから上に書いたもの、つまり11101010が、234の2進数です。
軽く騙されてるような気分ですよね。
では、逆に2進数から10進数に変換し直して、正しいかどうか確認しましょう。
それぞれの桁に2のnー1乗を掛けてすべてを足します。
(0x1)+(1x2)+(0x4)+(1×8)+(0x16)+(1x32)+(1x64)+(1x128)
どうですか?
234になりましたよね?
2進数と10進数の変換はこれで完成です。
何かすっきりしない人は以下を読んでください。
(基数変換の考え)
現在私たちが使う数字は位取り記数法という法則を使っています。
前にお話ししたとおり、ある基数の種類の記号を使って表現し、数があふれると桁を増やす方法です。
10進数であれば、0〜9までの10種類の記号を使い、9の次には1桁増やして10となります。
10種類の記号のことを底と言います。
2進数であれば、0と1を底と呼びます。
そこで、ある数を桁毎に分解してみます。
1234と言う10進数の数字は 1x103 + 2x102 + 3x101 + 4x100 と分解できます。
基数変換とは、使っている記号を変えるだけのことです。
この話の時だけ、2進数の記号を0=○,1=■と置き換えます。(こうしないと、理解しにくいのです)
上の例で使用している数字は、0、1、2、3、4、10です。
これを2進数(AB表記)で表すと、それぞれ○、■、■○、■■、■○○、■○■○となります。
(10進数の10は2進数では1010bですよね? だから■○■○となります)
1x103 + 2x102 + 3x101 + 4x100
は2進数表記にすると以下になります。
■x■○■○■■ + ■○x■○■○■○ + ■■x■○■○■ + ■○○x■○■○○
■○■○の○乗は、■です。
■○■○の■乗は、■○■○です。
■○■○の■○乗は、■○■○を2乗することですから、計算してみましょう。
x■○■○
○○○○
■○■○○
○○○○○○
■○■○○○○
■■○○■○○
よって、■○■○の■○乗は■■○○■○○です。
■○■○の■■乗は、■■○○■○○に、さらに■○■○を掛けたものです。
x ■○■○
○○○○○○○
■■○○■○○○
○○○○○○○○○
■■○○■○○○○○
■■■■■○■○○○
よって、■○■○の■■乗は、■■■■■○■○○○です。
やっと準備が出来ました。これを先ほどの式から計算していきます。
■x■○■○■■ + ■○x■○■○■○ + ■■x■○■○■ + ■○○x■○■○○
=■x■■■■■○■○○○ + ■○x■■○○■○○ + ■■x■○■○ + ■○○
=■■■■■○■○○○ + ■■○○■○○○ + ■■■■○ + ■○○
=■○○■■○■○○■○
10進数の1234は、2進数では■○○■■○■○○■○となるのです。
0と1にすると、10011010010bです。
この様に、表現する記号を置き換えることが基数変換なのです。
このやり方は、どんな基数への変換でも同じです。
ただ、この方式は計算が面倒なので、実際には使いません。
スッキリしましたか?