アーカイブ

‘プログラミング講座’ カテゴリーのアーカイブ

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 プログラミング講座

2進数とは(3) 〜 ビットとかバイトって聞くよね 〜

2008 年 11 月 26 日

2進数について、3回目の講義になりました。
だんだん飽きてきてると思いますので、ちょっと計算は止めましょう。

新聞ではほぼ毎日「1ギガビットDRAM価格が急落」とかのニュースが出てますね。
そんなニュースに興味ない?
それでは、「インテルが最新64ビットCPUを発表」という記事くらいは、この講義を見てくれている人なら
読んだことあるでしょう。

このビット、実は2進数の1桁のことを表しています。
英文字では、bitです。
つまり0、1のどちらか1桁の数字を入れることができる箱と考えられます。
DRAMと言うメモリはダイナミック・ランダム・アクセス・メモリの略でして、パソコンのメインメモリとして使われています。
このメモリの箱の数が1ギガ分あるということになります。
じゃ、ギガってなに?ってことになりますが、これは単位です。
メモリで使われる単位は、キロ、メガ、ギガ、テラなどがあります。
肉の1キログラムは1000グラムですよね。
つまり、1000を1キロとまとめています。
コンピュータの世界では2進数を使うので、1000という10進数は使いにくい。
そこで、キロは2の10乗を示します。

2の10乗は、10進数の1024となり、10進数の1000に近いのです。
メガは2の20乗、つまり1,048,576を示します。単位を表す文字は大文字のMです。
ギガは2の30乗となり、1,073,741,824を示します。単位を表す文字は大文字のGです。
最近はハードディスクの容量に1TBとかかれた物も出てきました。
これは、予想通り2の40乗となります。

よって、1ギガビットDRAMというのは、約10億個の0か1を入れる箱を持っていることになります。
指先の大きさにとんでもない数の箱を持つことが出きるなんて、技術の進歩はスゴいですね!

しかし、ここで話は終わりません。
皆さんのパソコンに入っているメインメモリは、1GBと書かれていませんか?
この大文字の「B」はビットを示していませんし、皆さんは「イチギガバイト」と読んでいますよね。
その通り、Bはバイト(Bytes)の略称です。
かならず、大文字のBを使います。
ビットは小文字のbを使います。
なぜ、バイトがあるのでしょうか?
ビットは0、1を1つ入れる箱を示します。
しかし、普段1つの箱ごとに使うのでは、効率が悪い。
そこで、最低限8個のビットをまとめて1バイトと呼ぶようにしたのです。

8bit = 1Byte

この式にしたがうと、1GBは8Gビットと言えます。
つまり、約86億個弱(8,589,93,592個)のビットの箱を持っているパソコンということになるんです。
途方もない数字ですね。

筆者が小さいころは、パソコンには32KBのメインメモリが入っていました。
これは、32x8x1024=26,2144個分の箱です。
25年のうちに、メモリは32768倍増えたのです。
それだけ大量な情報を扱うことができることにはなったのですが、OSが・・・
とこの辺で今回はおしまい。

『講義のまとめ』
1.ビットは0、1を表す箱のことである
2.8ビットは1バイトである
3.バイトの記号は大文字のBである
4.キロ、メガ、ギガなどの単位は、2の何とか乗という単位をまとめたもの

admin プログラミング講座