コンピュータのデータの取り扱い(P.133)

二進数

片手でいくつまで数えられるでしょうか?
0〜5?

実は全部のパターンを使うと0〜31まで数えられます。(実際はかなり難しい曲げ方もありますが)


0と1の二つだけの文字で数を数える数え方を二進数といいます。
十進数二進数
00
11
210
311
4100
5101
6110
7111
81000
91001
101010
111011
121100
131101
141110
151111
1610000

メモリ、ハードディスク

メモリ
DRAMはコンデンサに静電気をためて情報を記録します。

静電気が溜まるコンデンサは非常にたくさんありますが、8個あるいは16個でグループを作っています。
(上の図の黒いのはICという電気部品で、この中にミクロレベルのコンデンサとトランジスタが入っています。)
静電気が溜まっているコンデンサを黄色、溜まっていないコンデンサを青色で現すと
               
となります。これに黄色=1、青=0を対応付けると
0 0 0 0 0 1 1 0
これを二進数だと思い、10進数に直します。
二進数で000000110は十進数で6です。
結局これは、メモリが 6 という数字を記憶していることになります。

               
メモリー内部には、静電気をためる場所が、たくさんあります。
その配列を二進法で解釈して数値化します。


ハードディスク

ハードディスクには小さな磁石が並んでいます。
その向きを二進法で解釈して数値化します。


いずれの場合も、0ないし1をとるものがあり、それを二進数で解釈して数値化します。
とにかく数値化されていればメモリーに記憶させることができます。

ビット、バイト

0ないし1を取ることの出来るところを ビット(bit) といいます。
したがって、多くのシステムでは8ビットあるいは16ビットを単位としています。
また、特に8ビットを1バイト(Byte)と言います。

8ビット=1バイト の記憶が出来るところでは、00000000〜11111111 のパターンが作れます。
これを十進数にすれば0〜255の256通りになるので、8ビットの記憶領域があれば、0から255までの数値が記憶できます。

(16ビット=2バイト の記憶が出来るところでは、0000000000000000〜1111111111111111 のパターンが作れます。
これを十進数にすれば0〜65535の65536通りになるので、16ビットの記憶領域があれば、0から65535までの数値が記憶できます。)


以下のメモリには、静電気が溜まるところが240個あります。

したがって。これを8個ずつブロック化すると30個のブロックが出来ます。

つまり、これは30バイトの記憶が出来るメモリです。

後で学習しますが、アルファベットは8ビット=1バイトで一文字を表します。
したがって、上のメモリは30文字を記憶できます。

実際のメモリは256Mバイト(約256000000バイト)とか512Mバイトなどです。
したがって、256Mバイトのメモリは約256000000文字(2億5千6百万文字)のアルファベットを記憶できます。

ビットはbitと小文字で書きます。
バイトはByteとBを大文字で書くのが習慣です。
そこで省略形として、ビットは b、バイトはBを使うことがありますが、慣れるまで、この授業ではカタカナか、全部書く方式を使って、省略形はしばらく使わないことにします。

二進数→十進数

二進数を10進数に直すには、以下のようにします。
例えば、二進数の01001100を十進数に直すには、まず、左から2n、(n=0,1,2,3,,,)をかけます。

計算します。

計算結果を足します。

結果、二進数の01001100は、十進数では76となります。

十進数→二進数

逆に76を二進数に直します。
まず、76を2で割って、商と余りを書きます。

こんどは商(今の場合38)を2で割って、余りを書きます。
そうやって、割れなくなるまで続けます。

余りの部分に注目して、図のように左から右、そして上に進みます。
これを左から右に並べたものが、76を二進数にしたものです。

十六進数

このように、二進数と十進数は変換できますが、数が大きくなると変換の計算が大変です。
また、二進数を十進数にいちいち直す必要は、実はそれほどありません。
慣れてしまえば二進数のままで考えた方がいいです。

ところが、二進数で数を表すと、桁数が非常に大きくなって、わかりにくいです。
そこで、十六進数というものが良く使われます。

十六進数と二進数は、お互いの変換が非常に楽です。
また、十六進数は桁数もあまり大きくならないのでいいです。

十進数は0,1,2,3,4,5,6,7,8,9の10種類の数字で数を表します。
二進数は0,1の二つの数字で数を表します。
したがって、十六進数では16個の数字が必要ですが、数字はそんなにはありません。
そこで、足りない分はA,B,C,D,E,Fを使います。
十進数二進数十六進数
000
111
2102
3113
41004
51015
61106
71117
810008
910019
101010A
111011B
121100C
131101D
141110E
151111F
161000010
171000111
181001012
191001113
201010014
211010115
221011016
231011117
241100018
251100119
26110101A
27110111B
28111001C
29111011D
30111101E
31111111F
3210000020

十進数→十六進数

十進数の76を十六進数に直します。
前の例と同じように、今回は16で割って、商と余りを出します。

十進数の12は十六進数ではCなので直します。

下の左から右に読みます

こうして、十進数の76は十六進数で4Cであることが分かります。

十六進数→十進数

十六進数の4Cを十進数に直します。
前の例と同じように、16n(n=0,1,2,3,,,)をかけます。

計算します

計算結果を足します。

これで、十六進数の4Cは十進数の76であることがわかります。

十六進数⇔二進数

以上から、十進数の76は

十進数二進数十六進数
7610011004C

です。実は二進数→十六進数の変換は意外と楽です。

まず

二進数 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
十六進数 0 1 2 3 4 5 6 7 8 9 A B C D E F

この対応だけ覚えます。
1001100を十六進数にするには、まず下の桁から4けたずつ区切ります。

1001100


次に対応するものを上の表から探します。

1001100


これで 4C が求まります。

逆も簡単です



次に対応するものを上の表から探します。

1001100


これで 1001100 が求まります。

このように、コンピュータの仕組みを考えると二進数がいいのですが、これだと桁数が大きくなってしまうので、しばしば十六進数が使われます。

キロ、メガ、ギガ

1km(キロメートル)は1000mです。
”キロ”というのは、普通は103=1000を表します。
2000mをkmに直すには、1000で割って
2000 ÷ 1000 = 2
で、2km です。

”メガ”というのは、106=1000000 を表します。
”ギガ”というのは、109=1000000000 を表します。

ある単位のついた量ををキロに直すには、数字部分を1000で割ります。
さらにメガに直すには、数字部分をさらに1000で割ります。
さらにギガに直すには、数字部分をさらに1000で割ります。

逆にあるギガのついた量ををメガに直すには、数字部分に1000をかけます。
さらにキロに直すには、数字部分にさらに1000をかけます。
さらにキロもメガもギガもないようにに直すには、数字部分にさらに1000をかけます。

1kHz(キロヘルツ)= 1000Hz
1MHz(メガヘルツ)= 1000kHz = 1000000Hz
1GHz(ギガヘルツ)= 1000MHz = 1000000kHz = 1000000000Hz
です。

ところが、10進数では1000とか1000000とか1000000000などは、特別な数ですが、二進数では特別な数ではありません。

そこで、コンピュータの場合、特にメモリ関係(記憶量)の場合のみ、キロ、メガ ギガ などの単位の変更は1000をかけたり割ったりするのではなく、1024をかけたり割ったりするというルールを使います。
(1024=210

これはコンピュータのメモリ関係のみに使われる特別ルールです。

普通の物理の問題や、コンピュータでもクロック周波数などは、キロ、メガ ギガ などの単位の変更は本来の"1000で割る"、"1000をかける”というルールです。

(ただし、「1024で割る」というのは筆算や暗算では、結構面倒な計算なので、多少不正確であることを承知の上で、メモリの場合も1000で割ってしまうことがあります。
上に書いてある「256Mバイトのメモリは約256000000文字(2億5千6百万文字)のアルファベットを記憶できます。」というのは、このやや不正確な計算をしています。))

:次へ