- ベストアンサー
パソコンの動作原理について教えてください。
今、C言語の勉強をしているのですが、結局のところコンピューターはマシン語(機械語)で動作することを学びました。 イメージとしては 0 1 の羅列ということでいいんですよね? そこで質問なのですが、そもそもなぜ 2 3 とかではなく 0 1 なのか? というか 0 1 って何を表わしているの? そして、 0 1 でどのようにしてプログラムが動いているのか? これらのことについて、専門言語をなるべく用いずに、解説していただけないでしょうか? コンピュータが0と1で動いている、って意味が分かりません; 不思議でなりません。 どうか、教えていただけないでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
コンピューターの訳は計算機というくらいあって、コンピューターは計算が主な仕事です。 そして、0 1の羅列、つまり2進数を使っていものが現在では主流です。世界初の汎用コンピューターであるENIACは10進数を採用していたわけで、コンピューターは必ず2進数にする必要があるというわけではないと思いますが、2進数にしたほうが何かと効率的に作りやすいのでそうなっていると思います。 例えば、そろばんは10進数で計算していますが、一桁を表すのに5つの玉を使って表します。この構造により、例えば、99までの数字を表すのには、合計、10の玉が必要です。一方、2進数で数値を表すと玉が7つで99までの数字を表せます。桁が増えるとこの違いは顕著に現れ、例えば、0から65535まで表すのに、先に述べた10進数だと5桁*5玉で25玉必要ですが、2進数だと16玉で表せます。 これに合わせて足し算をする回路も効率的に作られています。先ほどのそろばんの例だと、1を表す4つの玉と5を表す玉を別々に扱う必要があり、桁上りしない足し算と桁上りする足し算を別々に考慮して計算する必要があります。例えば、足す数の1の位の玉が1つで、足される数の1の位の玉が1つなら、出力には1の位の玉2つが出力になります。しかし、足す数の1の位の玉が4で、足される数の1の位の玉も4なら、8となるので、5の位の玉1つと1の位の玉3つを何らかの回路で出力するように作らなくてはなりません。5の位の玉がある場合を考慮すると、場合分けの数は大量になってきて、なかなか作るのが大変そうに見えてきます。 一方、これが、2進数だと、足す数と足される数が両方1なら繰り上がり、そうでないならそのままという単純な回路で作ることができます。次を見てもわかるように、2進数の足し算をする回路はXOR回路がある場合、半加算器ごとに2つの論理回路を2つ組み合わせて、4つの回路で作ることができます。 http://ja.wikipedia.org/wiki/%E5%8A%A0%E7%AE%97%E5%99%A8 ちなみに、前段の半加算器でその桁の足し算、後段の半加算器で計算結果と繰り上がりを足し算しています。16桁の計算をするにはこれが16個あると良いので、48個の回路でできることになります。 なお、引き算は負の数の足し算、掛け算は掛ける数の回数の足し算、割り算は引き算をして引いた回数を数えることで作れますので、足し算の回路があることで基本的な四則演算ができるようになります。四則演算を行うためのデータはレジスターと呼ばれる特殊な記憶媒体に保存されており、実際のプログラム実行にはメモリーからレジスターにデータを読み込んだり、レジスターからメモリーにデータを書き戻したりもします。そして、プログラムは四則演算やメモリーへの読み書きのどれを実行するかという記述の羅列になります。 さらに、メモリーの一部は画面やハードディスクなどの記憶媒体、ネットワークデバイスにもつながっていて、そのメモリーを読み書きすることで画面を描画することや、ハードディスクからファイルを読み込むこと、通信をすることもできるようになっています。この場合も、同じようにメモリーのどこに何かを書いたらどういう意味になるということが事細かに決まっていて、そのとおりに回路も作ってあります。 というわけで、0 1の羅列は2進数のことであり、2進数のほうが何かとコンピューターを作るときに作りやすく、それが描画などにもつながっているというわけです。ここではかなり端折って書きましたが、もっと知りたい場合はパターソン&ヘネシー「コンピュータの構成と設計」あたりを読んでみることをお勧めします。
その他の回答 (5)
- Microstar
- ベストアンサー率21% (289/1367)
CPUはロジック回路が使われてい、しかも組み合わせていますので、0と1で動作できるようになっているからです。そのロジック回路は、AND回路、OR回路、INV回路、ゲート回路(ON/OFF)で出来上がっています。 どうやって動かすかというと、ROMからID(インストラクションデコーダー)にプログラムデータを解読して、そこから制御信号が流れて、各回路を動かすようになっています。 詳細に知りたい場合は、本屋へ行けば解説本が出ていますので、買って読んでみてはどうでしょうか?
お礼
ロジック回路についても、私は全然聞いたこともなかったので、知識が足りないようです; いろいろと勉強してから、このことについて学びたいと思います。 回答ありがとうございました。
- OKWavex
- ベストアンサー率22% (1222/5383)
パソコンのデータはすべて数値で表され(文字も文字コードという数値でデータ化)、その数値が2進数で処理されています。 電気回路で表せる状態は OFF と ON の2種類が一番単純で簡単であり、情報の最小単位として電気的な状態の OFF と ON の2種類が 0 と 1 に対応する(というかそれしか表せない)ので、0と1であらわせる2進数で処理しているのです。 その最小単位がビットでありそれが8個並んだ8ビットが1バイトです。 現在のパソコンのCPU・OSでは、32ビット・64ビットを一度に処理しています。 1,024バイトは1キロバイト、1,024キロバイトは1メガバイト、1,024メガバイトは1ギガバイトとなり、パソコンのデジタルデータでは1,024ごとに単位が上がるきまりなのが普通です(通常の数値のキロ・メガ・ギガ等の単位は1000ごとに上がります)。
お礼
回答ありがとうございました! 皆さん同じようなことを解説されているにもかかわらず、私には理解できないので、まだまだ知識が足りないようですね; 大学で勉強してからいろいろと踏み込んでいきます。
「はじめて読む8086」 とか 「はじめて読む486」というタイトルの名書があります。 古い本ですが、これに書かれている基礎技術は今も変わってません。
お礼
書籍ですね? 早速探してみます。 回答ありがとうございました!
- neko-ten
- ベストアンサー率55% (1287/2335)
なぜ0/1なのかっていえば、それしか扱えないからです。 量子コンピュータにおいては、この制限から外れるために(正確には微妙に違いますが)超並列演算が可能だったりします。 電源のON/OFFで判別する場合、中間が存在しないので(電流が流れてしまえばONですから)2や3と言った値は取りえません。 実際は、ある一定の閾値をベースに、それより上であれば1、それより下であれば0になります。 閾値を複数設定して、中間を定義すればいいんでないか?と思いますが・・・ その場合も、結局各閾値ごとに0/1の判別を行っているにすぎず、それならわざわざその回路を作るよりも0/1判別のみで論理回路ってのを設計したほうが早くなるのです。 論理回路というのは、この0と1の判別を組み合わせて設計する論理的な回路で、非常に単純なプログラムと言えます。 http://www.infonet.co.jp/ueyama/ip/glossary/logic.html こういった単純なものを組み合わせて、大規模なものを作っていくのが現在のコンピュータの流れになります。
お礼
すいません; 全く分かりませんでした・・・。 回答ありがとうございました。
- LHS07
- ベストアンサー率22% (510/2221)
0 1とは要するにあるかないかの世界です。 論理回路で言えばLowかHighかの世界です。 記憶媒体でいえばフィルムに記憶媒体を塗布しその極をS極かN極にすることによって記録できます。 どのように動いているのかは私たちはZ80とかで勉強しましたが いまはべつのCPU(H8とか)になっていると思いますが動作を習うことで勉強できます。
お礼
大学で学べますかね? 回答ありがとうございました!
お礼
詳しい解説ありがとうございました! 何となくとしか分かりませんでしたが、いろいろな本をようで勉強していきたいと思います。