• ベストアンサー

パソコンの動作原理について教えてください。

今、C言語の勉強をしているのですが、結局のところコンピューターはマシン語(機械語)で動作することを学びました。 イメージとしては 0 1 の羅列ということでいいんですよね? そこで質問なのですが、そもそもなぜ 2 3 とかではなく 0 1 なのか? というか 0 1 って何を表わしているの? そして、 0 1 でどのようにしてプログラムが動いているのか? これらのことについて、専門言語をなるべく用いずに、解説していただけないでしょうか? コンピュータが0と1で動いている、って意味が分かりません; 不思議でなりません。 どうか、教えていただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

コンピューターの訳は計算機というくらいあって、コンピューターは計算が主な仕事です。 そして、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進数のほうが何かとコンピューターを作るときに作りやすく、それが描画などにもつながっているというわけです。ここではかなり端折って書きましたが、もっと知りたい場合はパターソン&ヘネシー「コンピュータの構成と設計」あたりを読んでみることをお勧めします。

shure-neko
質問者

お礼

詳しい解説ありがとうございました! 何となくとしか分かりませんでしたが、いろいろな本をようで勉強していきたいと思います。

その他の回答 (5)

  • Microstar
  • ベストアンサー率21% (289/1367)
回答No.6

CPUはロジック回路が使われてい、しかも組み合わせていますので、0と1で動作できるようになっているからです。そのロジック回路は、AND回路、OR回路、INV回路、ゲート回路(ON/OFF)で出来上がっています。 どうやって動かすかというと、ROMからID(インストラクションデコーダー)にプログラムデータを解読して、そこから制御信号が流れて、各回路を動かすようになっています。 詳細に知りたい場合は、本屋へ行けば解説本が出ていますので、買って読んでみてはどうでしょうか?

shure-neko
質問者

お礼

ロジック回路についても、私は全然聞いたこともなかったので、知識が足りないようです; いろいろと勉強してから、このことについて学びたいと思います。 回答ありがとうございました。

  • OKWavex
  • ベストアンサー率22% (1222/5383)
回答No.5

パソコンのデータはすべて数値で表され(文字も文字コードという数値でデータ化)、その数値が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ごとに上がります)。

shure-neko
質問者

お礼

回答ありがとうございました! 皆さん同じようなことを解説されているにもかかわらず、私には理解できないので、まだまだ知識が足りないようですね; 大学で勉強してからいろいろと踏み込んでいきます。

noname#152572
noname#152572
回答No.3

「はじめて読む8086」 とか 「はじめて読む486」というタイトルの名書があります。 古い本ですが、これに書かれている基礎技術は今も変わってません。

shure-neko
質問者

お礼

書籍ですね? 早速探してみます。 回答ありがとうございました!

  • neko-ten
  • ベストアンサー率55% (1287/2335)
回答No.2

なぜ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 こういった単純なものを組み合わせて、大規模なものを作っていくのが現在のコンピュータの流れになります。

shure-neko
質問者

お礼

すいません; 全く分かりませんでした・・・。 回答ありがとうございました。

  • LHS07
  • ベストアンサー率22% (510/2221)
回答No.1

0 1とは要するにあるかないかの世界です。 論理回路で言えばLowかHighかの世界です。 記憶媒体でいえばフィルムに記憶媒体を塗布しその極をS極かN極にすることによって記録できます。 どのように動いているのかは私たちはZ80とかで勉強しましたが いまはべつのCPU(H8とか)になっていると思いますが動作を習うことで勉強できます。

shure-neko
質問者

お礼

大学で学べますかね? 回答ありがとうございました!

関連するQ&A

  • ショートカットが動作しません。

    初めての質問です。 ショートカットに関して質問です。 ◆環境 WindowsXPで複数台の同一設定のPCがあります。但し、コンピュータ名だけは異なります。 ◆症状  あるプログラムを動作させるショートカットを1台のPCで作成し、これを他のマシンにコピーしました。ショートカットキーによる動作が効きません。(そのショートカットのダブルクリックでは動作するのですが、、、)  そのショートカット(.lnk)をバイナリで見るとコンピュータ名の情報が含まれているようです。コンピュータ名が異なるマシンでは動作できないのでしょうか? 何かの設定で回避できるのでしょうか?   ご存じの方、ご教授下さい。

  • 最初のアセンブラ

    人間がハンドアセンブル際にアセンブリ言語と機械語の対応表を見比べて翻訳する作業を、コンピュータの黎明期に機械語で最初に作られたアセンブラはどのように行っていたのかということを教えて下さい。 プログラミング言語の歴史を考えてみると、(フォン・ノイマン型)コンピュータの黎明期では全てのプログラムは最初人間が直接真空管やディップスイッチのオン/オフを切り替えることで、機械語でプログラムを入力していたと思います。その後アセンブラが開発されたことで、人間はパンチカードやカセットテープなどを通してアセンブリ言語でプログラミングを行えるようになったと聞きました。 アセンブリ言語は機械語と1対1で結びついたもので、アセンブラはアセンブリ言語を機械語に翻訳するのだと言うことは分かります。しかし、パンチカードやカセットテープで入力したアセンブリ言語も、コンピュータにとっては根本的には0/1(スイッチのオン/オフ)という点では変わりはなく、最初のアセンブラはその0/1をどのようにして正しい機械語の0/1に変換することが出来たのでしょうか? 少し質問の意味が分かりにくいかもしれませんが、例えば MOV B, A //Bレジスタの内容をAレジスタに送る といったアセンブリ言語は、機械語では 01000000 に相当するかもしれません。しかしコンピュータがパンチカードを読み込んだ時点では 01010100 といった信号として入力されるとしたら、機械語で最初にアセンブラを作成した人はどのようにしてそれを適切な機械語(ここでは01000000)に翻訳出来たのでしょうか? 想像では最初に機械語で非常に超簡単なアセンブラの原型とも言えるプログラムを作って、それを元にした簡単なアセンブリ言語(の原型)でより高度なアセンブラを作る、といったことを繰り返していまのアセンブラが開発されていったと思いますが、では最初のアセンブラの原型とはメモリ上ではどのように実現されていたのか、ということが気になったので質問させていただきました。アセンブリ言語で実際にプログラムのイメージはこんな感じでは?ということを書いて下さっても構いません。 よろしくお願い致します。

  • プログラム言語って何があるの?

    私、プログラム言語について調べています。 ウィキペディアをみてもたくさんあって、そこからまたリンクがたくさんあってどこでどのように区切っていいのか分かりません。そこで皆さんに質問したいのですが、プログラム言語はどのようなものがありますか? 大まかにプログラム言語の総称があってその次に (1)機械語(マシン語) (2)アセンブラ言語 高水準言語これの中に (3)インタプリタ言語 (4)コンパイラ言語がありますが、 (1)~(4)のそれぞれの詳細を教えてください。例:BASIC、C等 またこの枠に入らないプログラム言語がありましたら教えてください。 とってもマイナーなものでも構いません。出来ればURL欲しいです。 お願いします。m(_ _)m

  • コンピュータって?

    ずっと疑問だったけど、私考なんだけど、CPUが500MHZとか CPUの性能を表すけど、これって、添付画像の下の波というか タイミングの回数で、感知する時間、しない時間を1サイクルとして 1秒間に500MHZだったら、1秒間に、0と1を5億回分まで認識出来ますってことでしょうか? また、プログラムでは、なんちゃら言語とかあるけど、これは わかりやすいように言葉(単語)になってるのだとおもうけど { } \ だったり、print だったり、そういう単語や記号を 0011001011(←適当)に変換したのがマシン語だと思うのだけど この0と1だけで、計算したり判断したりできるのがずっと 不思議なんだけど、たとえば、もし、printが0011001011だったと したら、0011001011は印刷をすることと、決められてるのしょうか? それぞれの記号やプログラム単語などには、それぞれに、0と1の 羅列がきめてあり、それに伴った動きをするってことでしょうか? そこが、未だにわからないです。 だとしたら(勝手にこうかな?って思ってるので違うかもしれないけど) プログラムの単語ほどに、0と1の組み合わせがあるってことに なるんでしょうか? だとすると、誰がそれを決めてるんだろう? 新しい用語が増えるたびに、決まるのだろうか?とか もし、そうなら、新しい用語が決まる前のコンピュータは その紐付けがないから動かないとなるとおもうから、 いや、これはやっぱり違うのかなって思っちゃう。 どうして1と0で動きが決まるのかがずっと疑問です。

  • WindowsXP上ではじめて読むマシン語のプログラムを実行したいので

    WindowsXP上ではじめて読むマシン語のプログラムを実行したいのですが。 いつもお世話になっております。 小生、只今アスキーブックスさんから出版されている、「はじめて読むマシン語」という書籍を読みながら、Z80の機械語を勉強しようと思っています。 しかし、肝心のZ80の機械語を実行できる開発環境がなく、どうしようかと思っています。 先輩方の中でWindowsXP上で動作する、Z80の機械語を実行できる開発環境をお知りの方いらっしゃいましたら、ご教示宜しくお願い致します。 お忙しい中申し訳ございませんが、以上ご確認の程、宜しくお願い致します。

  • JAVAでつくったプログラムはコンピュータ単体で動作しますか。

    ビギナなので,見当違いな質問ならば申し訳ない。 JAVA言語でつくったプログラムは.exeファイルのような形にして コンピュータ単体で動作させることはできないのでしょうか。

    • ベストアンサー
    • Java
  • プログラミングの第一歩 基礎の基礎

    C言語でのプログラミングを勉強したいと思っています。周りで教えてくれる人もいるのですが、いきなり話がプログラミング言語の初歩に入るので、よく理解できません。コンピュータとは無縁の文科系の私にもわかるように、初歩以前のABCを教えていただければうれしいです。 プログラミング自体は、書物を読めば分かると思います。ただ、ワードパッドなりメモ帳なりに組んだプログラムを実際にマシーンに読ませて動作させるようにするにはどうしたらいいのでしょうか。 Windowsの初期画面から、どこに入っていってプログラムを入力しますか? プログラムの保存先はCドライブですか? どうやって、そのプログラムを実行しますか? 恥ずかしながら、このレベルが分かりません。適切なサイトも見当たりません。 どうぞ宜しく教えて下さい。

  • Python。Seleniumの動作。

    個人的に仕事などで使えるプログラムツールを作りたいと思い、現在Pythonを勉強しています。 が、スタンパーみたいなソフトや、ログインなどの動作をしてくれるとか、自動でプルダウンをランダムに選択してくれるようなワンボタンのソフト等を作りたくてGUI前提で考えていたのですが、そもそもPythonをGUIにするのは重いからあまりしないと後で知りました。 色々調べたり聞いたりすると、そういう目的ならPythonがいいんじゃないかみたいに言われたりもしたのですが… SeleniumならWEBの自動操作が出来るということで色々弄っていたのですが、確かに操作は少し出来るようになってきましたが、あまりにも動作がアナログ的というか… 表示されていない要素は指定できないとか、WEBページの読み込みが間に合わないと動作がバグるとか。 個人的にはプログラムというのはもっと『このボタンを押せとコードを書いたらボタンを確実に押して進行してくれる』ものだと思っていたのですが。 こういうものなのでしょうか? それともSeleniumが実際に人が操作する動作をしっかり守ったものなのでしょうか。 これが例えば他の言語でコードを組んだ場合も、同じような動作になってしまうのでしょうか。

  • アセンブリ言語についてと言語の違いについて。

    高水準と低水準言語の違いは、まず、マシン語の2進数の羅列では分からないからアセンブリ言語が生まれ、 アセンブリ言語よりさらに人間が理解できる言語が、C言語やBASICなどでしょうか?教えていただけないでしょうか?合っていますでしょうか?

  • プログラミングを突き詰めて考えると難しい

    プログラミング(C.C++)を勉強しているのですが、プログラムが実行されるまでの流れの”中身”が分かりません。 ■C言語で書いたプログラム ↓ ■コンパイラ ↓ ■マシン語 ↓ ■CPU だと思うのですが中でどのように処理されているかがよく分かりません。 あと、「マシン語によるプログラミングでは、基本的にCPUが直接解釈できるマシンコードと一対一に対応するニーモニックを使用する。この後アセンブラによってニーモニックをマシンコードに変換し、CPUで実行できるようにする。」と書いてるあったのですが、C言語との違いは何なのでしょうか?どちらもマシンコードに変換するのでおなじプログラムだと思うのですが。 色々調べているうちにこれを理解していくにはかなり難しく、マシン語がどのようにCPUで処理されて結果としてでてくるまでの過程など勉強しなければいけない気がするのですが、わかりやすい参考になる本やサイトがれば教えて頂けないでしょうか