コンピュータはどのように計算しているのか?

  • コンピュータ(CPU)は単なるスイッチの集合体である。
  • スイッチのオン・オフを数値の1・0と考えて2進数で計算している。

以上のことは真理かもしれないけど、今イチ現実味がない。そのままでは、CPUの姿は想像できない。単なるスイッチが、その内部でどうやって計算しているのか?もう少し具体的な姿を見るために、調べてみた。

10進数ではない数値

  • 人間が計算すると言ったら、それは当然10進数で計算することになる。
  • 10進数とは、1桁が10の数字によって区別される数値の表現方法である。
  • 0から9まで数えたら、桁上がりして10になる。
  • ところで、普段はあまり意識しないが、時計は12進数と60進数が組み合わさった数値の表現方法である。
    • ストップウォッチが付属していると、10進数も関係している。
  • あるいは、曜日は7進数的な表現方法と言える。(桁上がりは、ないけど)
  • 1年は12ヵ月あり、12進数的である。
  • さらに干支は、十干と十二支を組み合わせた60進数的な表現方法だ。
    • 還暦を迎えて、生まれた時の干支に戻る。
  • ドレミの音階は半音まで含めると12音階あり、12進数的な表現方法である。
  • トランプは13進数的。

探してみると、10進数以外の数値表現方法も日常に溶け込んでいるのだ。

  • ただ、10進数のように計算する概念がほとんどないが。
  • たまに時間の計算をすると、10進数に変換しながら計算している自分がいる。

2進数

  • CPUの世界では、すべてが2進数で表現される。
  • 2進数では、0から1まで数えたら、桁上がりして10になる。
  • 10進数の10まで数えてみると、こんな感じ。

10進数 2進数
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001
10 1010

  • 見てのとおり、人間にとっては非常に読みにくい!

ところが、CPUにとっては2進数はとっても扱い易い数字なのであった。

計算するとは?

  • 「1+1」を計算する時、果たして人間はどのように計算しているのだろうか?
  • 「自分はちゃんと足し算を理解しているから頭の中で計算できるのさ」と思っている人は以下の問題を3秒以内に計算してみれば、たぶん気付く。
    • 3 + 5 =
    • 6 + 4 =
    • 7 + 8 =
  • 3秒以内に計算できた人は、おそらく計算していない。きっと、数字を見た瞬間に答えが頭に浮かんできたはず。
  • そう、1桁の足し算は、掛け算九九のように丸暗記してしまっているのだ。(少なくとも自分はそう)
    • この事実は、小学校1年生に足し算を教えていて気が付いた。
  • 掛け算九九のように意識して記憶しているわけではないが、何度も繰り返し自然と覚えた足し算九九が無意識にあるのだ。

つまり、計算するとは、記憶から答えを導き出すことだったのだ。

  • 桁数が多くなっても、基本は1桁同士の足し算を桁上がりを考慮しながら、記憶から導き出している。

2進数の九九

  • 10進数の1桁の足し算は、全部で100通りある。
  • では、2進数の1桁の足し算は、何通りになるだろうか?
    • 0 + 0 = 00
    • 0 + 1 = 01
    • 1 + 0 = 01
    • 1 + 1 = 10

以上、たったの4通りしかないのだ!

  • ここで偉い人は考えた。

もし、スイッチのオン(1)・オフ(0)に反応して2進数の九九のように出力する回路ができれば、計算していることになる!と。

  • 果たして、そんな都合の良いことができるのだろうか?

論理回路

  • いきなり足し算回路を考えるのは難しいが、AND・OR・NOTの論理演算をする回路は比較的簡単に想像できる。
AND
  • 両方のスイッチがオン(1)の時だけ、点灯(1)する。

http://www.infonet.co.jp/ueyama/ip/glossary/and_gate.html
OR
  • どちらかのスイッチがオン(1)であれば、点灯(1)する。

http://www.infonet.co.jp/ueyama/ip/glossary/or_gate.html
NOT
  • スイッチがオン(1)であれば消灯(0)する。オフ(0)であれば点灯(1)する。
    • 入力とは逆の結果を返す。

http://www.infonet.co.jp/ueyama/ip/glossary/not_gate.html

足し算回路

そして、上記のAND・OR・NOTの論理回路を以下のように組み合わせると、2進数の足し算ができてしまうのだ。

  • 以下の記号の意味は、上記AND・OR・NOT回路の記号と同じ。
  • AとBに、1や0を入力して変化を追って行くと、2進数一桁の足し算ができていることに気付く。

http://www.infonet.co.jp/ueyama/ip/logic/adder.html

以下のページでは、上記回路のシミュレートがマウスクリックで簡単にできる。

2桁以上の足し算回路

  • 上記の足し算回路を「半加算器」と呼ぶらしい。
  • 半加算器では、1桁の2進数の足し算しかできないが、
  • さらに、半加算器を二つ、以下のように接続する(全加算器と呼ばれる)ことで、2桁以上の足し算が可能になる。

http://ja.wikipedia.org/wiki/%E5%8A%A0%E7%AE%97%E5%99%A8
  • そして、上記の半加算器・全加算器を複数繋げば、理論上は何桁の足し算でも計算可能なのである。

http://ja.wikipedia.org/wiki/%E5%8A%A0%E7%AE%97%E5%99%A8

CPUの動作原理

  • 上記のように複数ビット*1の演算が可能になり、8ビットまとめて演算できるのが8ビットCPUと呼ばれる。
  • 現在では、16ビット、32ビットを経て、Intel Core2Duo以降は64ビットCPUとなっている。

所感

やはり、CPUはスイッチの集合体であった!
CPUは計算していない。反応しているだけ。

参考ページ

  • コンピュータの仕組みを調べていて、わかり易い思ったページは、辿って行くとすべて教育機関のものだった。

すべてのページに深ーく感謝!流石です!

関西外国語大学

*1:2進数の一桁を1ビットと呼ぶ。