コンピュータの仕組み(電気回路〜基本論理回路)

先日、友人にコンピュータが0と1の世界なのは知っているが、何故0と1でパソコンとかみたいな動きをするのかが意味わからんと言われたので復習がてら数回かけてまとめてみようと思います。

データの表現と演算

コンピュータ内部では、入力されたデータは全て電気信号に変換されるが、この場合の信号は、例えば0[V]または5[V]のように、二つのレベルのどちらかのみを取ると考える。このようにレベル数が有限の信号をディジタル信号と言い、反対にレベル数が無限にある信号をアナログ信号と言いう。

電気信号の大きさは雑音や歪によって変わるので、コンピュータの内部も物理的には、アナログ信号だが、2.5[V]以下は0、それ以上は1とみなすことで論理的にディジタル信号で扱っている。

2進数

普段、僕たちが使っているのは、10を基数とした10進数で、無意識に以下のような位取り記数法と呼ばれる表現を使っている。

例えば、123.45なら、
123.45 = 1 \times 10^2 + 2 \times 10^1 + 3 \times 10^0 + 4 \times 10^{-1} + 5 \times 10^{-2}

人間は、手の指が10本なので、10進数で数えるのが楽なのだが、コンピュータはあらゆるデータを0と1の世界なので、2進数を用いる。

例えば、45を2進数で表すと、
(101101)_2 = 1 \times 2^5 + 0 \times 2^4 + 1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 = 45
のようになる。

負の数の表現

2進数において、一般的に用いられる負の数の表現方法は、補数という表現。
補数には、1の補数と2の補数の二つがあり、一般的には2の補数を用いる。

2の補数とは、2真数の各ビットをビット毎に反転させ、1を加える。

  • 例)8ビットでの2進数の計算

13 =  (00001101)_2
-13 = (11110011)_2^2
15 - 13 = (00001111)_2 + (11110011)_2^2 = (00000010)_2 = 2

基本論理回路

ブール代数

コンピュータは、主にディジタル回路で構成されるが、そのディジタル回路の主要部分は、論理回路によって占められている。
論理回路を解析したり設計したりする際にブール代数と呼ばれる理論が応用されている。
基本は、論理否定(NOT)、論理和(OR)、論理積(AND)の三つ。

ダイオードトランジスタ

論理回路を説明する前に、それらを構成するのに必要な2つの電子素子を説明する。

ダイオード
整流作用(電流を一定方向にしか流さない作用)を持つ電子素子。
下図において、AからBには電流は流れやすいが、BからAにはほとんど流れない。

トランジスタ
増幅、またはスイッチ動作をする半導体素子で、近代の電子工学における主力素子。
簡単に説明すると、下図において、ベース B からエミッタ E に少し電流を流すと,コレクタ C からエミッタ E へと電流が流れやすくなるような装置で、スイッチとして使用される。


論理否定(NOT)

入力を“0”を“1”に、“1” を“0”に反転。

入力 出力
0 1
1 0

入力Aが"0"の時は、トランジスタ部分のC(コレクタ)からE(エミッタ)に電流が流れないため、出力の電圧は、"1"(V[V])になり、入力が1の時は、CからEに電流が良く流れるため、出力の電圧は"0"になる。

論理和(OR)

入力A、入力Bのどちらか1つでも"1"の場合に、出力が"1"となる。

入力A 入力B 出力
0 0 0
0 1 1
1 0 1
1 1 1

今度は、出力がトランジスタのエミッタ側にあります。
入力A、入力Bがどちらも"0"の場合、トランジスタのC(コレクタ)からE(エミッタ)に電流が流れないため、出力は"0"となり、入力のどちらかが"1"の場合には電流が流れ、出力は"1"となる。

論理積(AND)

入力A、入力Bが両方とも"1"の場合のみ、出力が"1"となる。

入力A 入力B 出力
0 0 0
0 1 0
1 0 0
1 1 1


この回路では、入力部分のダイオードがOR回路と逆になっている。

  • 入力A、入力Bがともに"0"の場合、トランジスタに電流は流れないため出力は"0"
  • 入力のどちらか1つが"1"の場合、電流は"1"ではない方の入力の方に流れてしまうため、トランジスタには流れず、出力は"0"
  • 2つの入力が"1"の時、トランジスタに電流が流れ、出力は"1"となる。