はじめに、コンピュータの仕組みについて、概要を説明します。 コンピュータの構成要素は、まず、ハードウェアとソフトウェアに分けられます。
ハードウェア ( hardware ) とは、コンピュータを構成する装置のことです。 ハードウェアには、中央処理装置、記憶装置、入出力装置などがあります。
中央処理装置 ( central processing unit )は CPU とも呼ばれ、各種の制御や演算を行う装置です。 CPUはコンピュータの「頭脳」であると考えてください。
記憶装置 ( memory unit )は、データを記憶する装置です。 記憶装置は、主記憶と補助記憶に分類されます。 主記憶 ( main memory )は、容量が小さい代わりに高速に記憶できる装置です。 代表的な主記憶は、メモリです。 一方、 補助記憶 ( auxiliary memory )は、速度が遅い代わりに大容量の記憶ができる装置です。 代表的な補助記憶は、ハード・ディスク、フロッピー・ディスクなどです。
入出力装置 ( input/output unit )は、主に人間との間で入力や出力を行う装置です。 代表的な入出力装置は、キーボード、マウス、ディスプレー、プリンタなどです。
代表的な主記憶である メモリ ( memory )には、1バイト単位でデータが格納できます。 それぞれのバイトには、 アドレス ( address )と呼ばれる番号が割り当てられています。 CPUは、アドレスを指定して、メモリの中のデータを読み書きします。
CPUの内部には、制御を行う制御装置と演算を行う演算装置があります。 この他に、 レジスタ ( register )と呼ばれる、極小容量・超高速の記憶装置があります。 レジスタには、役割が決まっている専用レジスタと、自由に使える汎用レジスタがあります。 専用レジスタには、演算データが格納される アキュムレータ ( accumulator )や、命令アドレスを指定する プログラム・カウンタ ( program counter )などがあります。
さて、コンピュータが動くとはどういうことでしょうか。
コンピュータが動くことは、CPUが次々に命令を実行することです。 ここで、 命令 ( instruction )とは、CPUの動作を意図するデータです。 例えば、レジスタの値をメモリに書き込め、メモリを読み取りレジスタに格納せよ、アキュムレータの値とレジスタの値を足してアキュムレータに格納せよ、などの命令があります。
命令の系列を プログラム ( program )と呼びます。 プログラム内蔵方式 ( stored program )とは、プログラムをデータと同じように記憶装置に格納し、プログラムを実行するときは、プログラムを記憶装置から取り出し、その命令の系列を解釈して実行する方式を言います。 現在のコンピュータは、プログラム内蔵方式で動いています。
プログラムの集まりを ソフトウェア ( software ) と呼びます。
前回、情報科学は情報の構造や処理に関する学問であると言いました。 今日は、その第一歩として、コンピュータの内部では、データはどのように表現されるのかについて説明します。
コンピュータが扱うデータの単位はビットです。 ビット ( bit )とは、0と1のことです。 ビットを実現するには、必ずしも記号を書く必要はなく、電圧の有無といった2種類の区別できる量でも実現できます。
コンピュータの内部では、データはすべてビットの列によって表現されます。 このビットの列による表現は、 2進符号 ( binary code )と呼ばれます。
なお、ビットはデータの単位としては小さすぎて扱いにくいですので、通常のシステムでは、バイトをデータの単位とします。 バイト ( byte )とは、8ビットのまとまりのことです。
コンピュータの扱うデータの中では、数値、特に整数が重要です。 ここでは、整数の2進符号について説明します。
例えば、整数のつもりで 123 と書きますと、これは
という値を持ちます。 0から9までの10種類の数字を並べ、100の位の数字が100の重さを持ち、10の位の数字が10の重さを持ち、1の位の数字が1の重さを持つのです。 このように、数字の位置に応じて重さを変える、数値の表記法を、 位取り ( positional notation )と呼びます。 そして、重さが10倍10倍であることを、この位取りの 基数 ( radix )は10であると言います。 基数10の位取りによって表現された数が 10進数 ( decimal number )です。
2進数 ( binary number ) とは、基数2の位取りによって表現される数のことです。 2進数では、0か1の数字を並べ、右から1の位、2の位、4の位、8の位、…となります。 例えば、2進数 110 は、
という値を持ちます。
普通のシステムでは、整数の2進符号として2進数を用います。 つまり 、0と1による位取りをビットの列に対応させます。 桁数が足りなければ、左側に0を追加します。 10進数と2進数、2進符号の対応は次の通りです。
10進数 | 2進数 | 2進符号(1バイト) |
---|---|---|
0 | 0 | 00000000 |
1 | 1 | 00000001 |
2 | 10 | 00000010 |
3 | 11 | 00000011 |
4 | 100 | 00000100 |
ここで、10進数と2進数を相互に変換する方法について説明します。
10進を2進数に変換するには、次のようにします。
なぜこの方法で変換できるかについて、簡単に説明します。 例えば、2進数 xyz は、式
で表されます。 この式は
と書き直せます。 したがって、これを2で割れば余りは z になり、また2で割れば余りが y になり、…というわけです。
例題1. 10進数 58 を2進数に変換してください。
解答例1.
したがって、10進数 58 は2進数で 111010 です。
2進数を10進数に変換するには、次のようにします。
2進数から10進数への変換は、10進数から2進数への変換のちょうど逆のことを行っています。
例題2. 2進数 101000 を10進数に変換してください。
解答例2.
したがって、2進数 101000 は10進数で 40 です。
2進数の四則演算は、10進数の場合と同様に行います。 ただし、繰り上げと繰り下げには注意が必要です。 例えば足し算ならば、10進数の場合は10以上で繰り上げましたが、2進数の場合は2以上で繰り上げます。 具体的は、1と1を足したら、0を書いて1を繰り上げます。
例題3. 10進数の足し算 50 + 29 = 79 を2進数で行ってください。 始めに 50 と 29 を2進数に変換し、2進数の足し算を行った後、結果を10進数に変換します。
解答例3.
10進数 50 は2進数で 110010 です。
10進数 29 は2進数で 11101 です。
1 1 0 0 1 0 + 1 1 1 0 1 --------------- 1 0 0 1 1 1 1
和は2進数で 1001111 です。
2進数 1001111 は10進数で 79 です。
問1. 10進数 77 を2進数に変換してください。
問2. 2進数 1011011 を10進数に変換してください。
問3. 10進数の足し算 54 + 22 = 76 を2進数で行ってください。 始めに 54 と 22 を2進数に変換し、2進数の足し算を行った後、結果を10進数に変換します。
今日の演習2の答案をメールで提出してください。 メールの差出人は学内のアドレス(b04a001@twcu.ac.jpなど)とし、メールの宛先はkonishi@twcu.ac.jpとします。 メールの本文には、学生番号、氏名、科目名、授業日(10月7日)を明記してください。