ホーム > プログラミング講座 > 2進数とは 〜10進数との関係〜

2進数とは 〜10進数との関係〜

2008 年 12 月 9 日

2進数とは0と1で出来ていることは、ここまでの講義を受講された方はお分かりのことだと思います。

そろそろコンピュータ寄りの内容にしていきましょう。

いきなり結論ですが、現在一般的に使用しているコンピュータは0と1しか使えません。

究極な2進論者です。

じゃあ、文字や画像や数字の「ー」はどうするんだ?という疑問が出てくれば、筆者は嬉しいです。

「それでもコンピュータは0と1しか使えない」

ガリレオの名ゼリフのようにはいきませんが、これは絶対の制限なのです。

しっかりと覚えておいてください。

そろそろ本題です。

電卓もコンピュータです。しかも0と1しか使えません。

しかし、10進数の計算をすることができます。

実は2進数と10進数はお互いに変換することができます。(一部を除いては・・・)

この作業を基数変換と言います。

ますは、2進数から10進数の変換。

ある2進数の数字を1101bとします。

bとは、2進数の数字であると、わかりやすくするための記号です。コンピュータの中では使用されません。

あくまで、人が10進数と間違えないようにする記号です。

先ほどの数字を10進数に変換します。

  1. 1桁目に1を掛けます。
  2. 2桁目に2を掛けます。
  3. 3桁目に4を掛けます。
  4. 4桁目に8を掛けます。
  5. 上4つの計算で出た数字を足します。

これで10進数の数字になります。

つまり、(1x1)+(0x2)+(1x4)+(1x8)=13です。

1011bは13なのです。

4ビットの2進数をすべて10進数にしたものが以下の表です。

  1. 0000b = 0
  2. 0001b = 1
  3. 0010b = 2
  4. 0011b = 3
  5. 0100b = 4
  6. 0101b = 5
  7. 0110b = 6
  8. 0111b = 7
  9. 1000b = 8
  10. 1001b = 9
  11. 1010b = 10
  12. 1011b = 11
  13. 1100b = 12
  14. 1101b = 13
  15. 1110b = 14
  16. 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進数の数字は 1x10 + 2x10 + 3x101 + 4x10 と分解できます。

基数変換とは、使っている記号を変えるだけのことです。

この話の時だけ、2進数の記号を0=○,1=■と置き換えます。(こうしないと、理解しにくいのです)

上の例で使用している数字は、0、1、2、3、4、10です。

これを2進数(AB表記)で表すと、それぞれ○、■、■○、■■、■○○、■○■○となります。

(10進数の10は2進数では1010bですよね? だから■○■○となります)

1x10 + 2x10 + 3x101 + 4x10

は2進数表記にすると以下になります。

■x■○■○■■ + ■○x■○■○■○ + ■■x■○■○ + ■○○x■○■○

■○■○の○乗は、■です。

■○■○の■乗は、■○■○です。

■○■○の■○乗は、■○■○を2乗することですから、計算してみましょう。

■○■○
x■○■○


○○○○
■○■○○
○○○○○○
■○■○○○○


■■○○■○○

よって、■○■○の■○乗は■■○○■○○です。

■○■○の■■乗は、■■○○■○○に、さらに■○■○を掛けたものです。

■■○○■○○
x    ■○■○


○○○○○○○
■■○○■○○○
○○○○○○○○○
■■○○■○○○○○


■■■■■○■○○○

よって、■○■○の■■乗は、■■■■■○■○○○です。

やっと準備が出来ました。これを先ほどの式から計算していきます。

■x■○■○■■ + ■○x■○■○■○ + ■■x■○■○ + ■○○x■○■○

=■x■■■■■○■○○○ + ■○x■■○○■○○ + ■■x■○■○ + ■○○

=■■■■■○■○○○ + ■■○○■○○○ + ■■■■○ + ■○○

=■○○■■○■○○■○

10進数の1234は、2進数では■○○■■○■○○■○となるのです。

0と1にすると、10011010010bです。

この様に、表現する記号を置き換えることが基数変換なのです。

このやり方は、どんな基数への変換でも同じです。

ただ、この方式は計算が面倒なので、実際には使いません。

スッキリしましたか?

admin プログラミング講座