ActionData↑

IT関連

コンピュータの動作原理

  • ・コンピュータの動作原理について簡単にご説明します。
  • ・データ分析・解析でITが関係するため記事にしております。
  • ・ITの理解を深めたい方はご参照ください。
  • ・不明点あれば問い合わせください。
  • ※当サイトで掲載しているデータは適当に作成したものであり、実際のものではありません。

なぜコンピュータで計算ができるのか?


 コンピュータに対して何かしてほしいことがあるとき、どうやってそれをやらせればいいのでしょうか。 実はそれは、普段、私たちが他人に対して行っている方法とまったく変わりありません。 つまり、そのしてほしい内容を、コンピュータが分かるような言い方でコンピュータに言えばいいのです。 そのようなコンピュータが直接理解できる言語を機械語と言います。 例えば以下のような文字列です。

   

 見て分かるように、機械語は'0'と'1'の2種類の文字のみで表現されています。 ここで注意ですが、'0'と'1'は具体的な数字ではなく、2種類の何かを示すだけのただの記号です。 よって、別に'0''1'ではなく、'A''B'であっても構いません。 とにかくその組み合わせが表現できれば何でもいいのです。 しかし、それらを用いて計算することが多く、やはり'0'と'1'であった方が扱いやすいと言えます。 そしてそれら'0'と'1'が意味している2種類の何かとは、

   0 ⇒ ない = 電気が流れていない
   1 ⇒ ある = 電気が流れている

という回路の状態です。 言うまでもなく、機械は電気で動いており、回路に流れる電流の有無によって計算や処理を行います。 つまり機械の動作は、電流がどのような流れ方をしているか、またはどこを流れているかにより制御されます。 例えば、1+2=3という単純な演算を回路上で実現するとなると、

   1.足される側に「1」を示す電流(0001)を流す
   2.足す側に「2」を示す電流(0010)を流す
   3.足される側の電流と足す側の電流を受け取る
   4.受け取った電流を加算する回路に流す
   ※何かと何かを受け取って何かを出力する回路に流すということ
   5.その結果として「3」を示す電流(0011)を出力する

といった具合になります。 1を示す電流を0001としましたが、これは、4本の線があったときに、最も右側の線にだけ電流が流れている状態です。 同様に2を示す電流0010は、右から2番目の線にだけ電流が流れている状態です。 ただ、2を示すのであれば0002とするのが妥当です。 当初はそういった考え方もありました。 しかし、0001と0002を区別することは容易ではありません。 電圧や電流の差で区別することもできますが、そうなると回路に流れる電流を事細かくチェックしなければならなくなります。

 試行錯誤された結果、「やはり流れている流れていないかで表現しよう!」という方針で落ち着きました。 よって、コンピュータの世界では'0'と'1'しか扱いません。 したがって、2を示す電流は0010が妥当となります。 0002とできない以上、横にずらすしかありません…。 こういった2種類の記号(基数と言う)だけで構成されている数を2進数と言います。 ただし2進数では可読性が低いため、人間が機械語を編集する際は8進数16進数が利用されます。 例えば以下のような文字列です。

   

16進数のため'0'から'F'までの16種類の文字で表現されています。 ちなみに私たちが日常的に利用している数は10進数です。 そして例えば、10進数における10は、2進数では1010となり、16進数ではAとなります。 逆に、2進数における10は10進数では2となり、16進数における10は10進数では16となります。

何はともあれ、電流の流れを2進数に当てはめることにより、回路上で数値を表現することができます。 ここで、2進数に当てはめている以上、1+2の計算結果である3を示す電流は0011となります。 0100ではありません。 仮に0100を3とすると、N種類の数値を表現するためにN本の線が必要となります。 これでは非効率です。 ゆえに3を示す電流は0011となります。 このように2進数に則ることで、リソースに対して効率良く数値を表現できるようになります。 ちなみに、指で数を数える場合は10までしか数えられないように思われがちですが、2進数で表現することによって10本の指で1024まで数えられるようになります。

 以上を踏まえて、0001+0010=0011の計算を、回路上で実現させることを考えます。 それはつまり、0001と0010の電流を受け取ったときに0011を出力する回路を組み立てるということです。 …。 と言うとおおげさに聞こえますが、0001+0010に関して言えば、それぞれの電流を受け取ってそのまま流せば0001+0010=0011になります。 繰り上がりがないため、単純に結線するだけで加算したことになるのです。 イメージとしては以下のようになります。

   

今回は0001+0010=0011であり、繰り上がりはありませんでした。 もし0001+0001=0010のように、繰り上がりが発生する場合は、それも考慮しなければなりません。 とはいっても、どちらも1だった場合にその桁を0にして、上位の桁に+1すればいいだけです。

 ここまで、コンピュータにおける計算の仕組みについて大雑把に説明してきました。 その他、「小数負の数はどうやって表現しているのか?」や「加算以外の演算、減算乗算除算はどうやって実現しているのか?」など、いろいろありますが、これ以上は割愛します。 何はともあれ、1を示す電流と2を示す電流を入力したときに3を示す電流を出力する回路は、1+2=3を計算する回路として使えるのです。 少なくとも私たちから見て、コンピュータは1+2=3の演算を行ったかのように見えるのです。