No.6ベストアンサー
- 回答日時:
専門ではないので、うさんくさい説明。
●プログラムは2進数の0と1で動いているそうなのですが、なぜパソコンは0と1が判断できるのでしょうか?
プログラムがコンパイルされて機械語になる。
プログラム上では改行しろとか、テキストを表示させろとか思いのまま。
そのコードがプログラミングのソフトウェアによって機械語に変換される。
機械語になったやつは直接コンピュータ上からハード的に実行できる。
例えば機械語のmovってコマンドもコンピュータ内部では010101とかの2進数で表示されてる。
これをコンピュータ内部で演算して命令を実行してる。
高級言語でプログラム
→コンパイルで機械語
→機械語はコンピュータ上のどっかのメモリに010101などと羅列される
→マイコンの中に機械語命令一覧が格納されているので、それと照らし合わせて、メモリに書かれた010101が何の命令なのか判断する。
→その命令にあった内容をハード的に実行し、結果を出力する(画面表示やメモリの移動等)
実際はOSが絡んでるし、もっと複雑だと思うけど、こんな感じ。
コンパイル
http://e-words.jp/w/E6A99FE6A2B0E8AA9E.html
機械語
http://e-words.jp/w/E6A99FE6A2B0E8AA9E.html
●電気の高低で全部の数字を表現できても、なぜ足し算などの演算ができるのかが疑問なのです。
コンピュータ内部は2進数で考える。
たとえば
2+1=3
を2進数で書くと
10+01=11
となる。
どんなプログラミング上のどんな複雑な命令も、ハード的にはメモリの移動や演算(比較・乗算・加算など)しているだけ。
つまり、コンピュータのハード面では2進数で乗算・加算などの単純な演算を何回も(数億回も?)繰り返してるだけ。
上の例でいってる
10+01=11
は
1の位 0+1= 1
2の位 1+0=1
をしている。
ここで1の位の0+1=1の部分に着目する。
そしてこれを0+1の部分が2入力で、=1の部分を1出力と考える
0+1だとわかりづらいのでA+Bとする。
同様に=1を=Cと表現する。
つまり
A+B=C
となる。
ここで2入力1出力の表にしてみる。
A B | C=A+B
---+------
0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 1
これを論理演算のORという。
論理演算のORをハード的に実現するにはトランジスタやダイオードといった半導体を使う。
ここから半導体の中身の話になるけど、適当な説明でもうん百行の説明になるのでしない。
超適当な説明だと、電気はよく水の水位に例えられるから、それで説明。
2入力1出力の水路があるとする。
A--|
|----C
B--|
AとBの水路から水を流す(AとBは図でいう右向き一方通行で逆流はしない)。
このとき、Cの水位が一定になると警報がなる。
この警報を鳴らすという行為や一方通行を制御するのにコンピュータ上ではトランジスタっていうものを使っている。
もちろん実際のハードでは水位ではなく、電位(電圧レベル)で動いている。
●プログラムがないのに演算ができるんですか!?
ハードではプログラムの話は関係ない(いらない)。
例えば、上の例でAかBに1がきたら、Cに1を立てろっていうのはハードで事前に組むもので、(ユーザーによって)プログラムされたものではない。
上記例ではORだけだけど、実際にはこのような論理演算子が何万?と入っていて、もっと複雑な演算を実行している。
つまり、movやloadなどの機械語が実行される部分の関数を事前にハード的に作っておけば、ユーザーは入力と使う関数を選ぶだけで、あとはハード側で処理する。
結構がんばって説明したけど、たぶんこれ読んでも疑問はつきないと思う。
初歩の初歩をかじるだけでも簡単に一冊本が書ける。
疑問をそこそこのレベルで納得させるには大学で数年間勉強する必要がある。
とりあえず、お手軽にこんなの読めば?
プログラムはなぜ動くのか ― 知っておきたいプログラミングの基礎知識
http://www.amazon.co.jp/exec/obidos/ASIN/4822281 …
コンピュータはなぜ動くのか~知っておきたいハードウエア&ソフトウエアの基礎知識~
http://www.amazon.co.jp/exec/obidos/ASIN/4822281 …
No.8
- 回答日時:
ANo.4=Interestです。
ANo.6 の回答がすごくわかりやすいですね。ANo.4 での私の回答は、話を飛ばしすぎていた感があります。
あらためて、順を追って説明します。
(1)情報の表現方法
あらゆる情報を数字で表すことができます。そして、コンピュータ内部ではこの数字を2進数で扱います。
例1: 10進数の5 = 0101
文字の場合は、ASCIIコードやJISコードなどのルールに従って文字を数字で表現します。
例2: アルファベットの A = 01000001
例3: 改行 (CR) = 00001101
例4: 空白 (SP) = 00010000
(これが、ANo.1の方が答えてくださった内容です。)
(2)コンピュータのハードウェア
コンピュータは主に、
CPU、主記憶装置(メモリ)、入出力装置、補助記憶装置(HDDなど)
で構成されています。プログラム(命令)やデータは主記憶や補助記憶に記憶されており、CPUは読み込んだ命令に従って処理を実行します。
(CPUは電源が入ったときにどこから最初に命令を読み出すかを知っています。)
主記憶(メモリ)はトランジスタ、抵抗、コンデンサの組み合わせでできており、2進数で表された命令やデータを電圧の高/低で記憶しています。
(3)CPUの役割
CPUがやっていることは基本的に、
命令を読み込む → 演算する → 命令を実行する
です。命令は主記憶(メモリ)から読み込みます。演算は、トランジスタによる論理回路で構成した演算装置(ALU http://ja.wikipedia.org/wiki/ALU)で行います。
論理回路(の加算器の例)については、ANo.6 の方の説明にあるとおりです。
命令の実行結果ですが、
a) 主記憶からデータ(命令)を読み込む
b) 主記憶にデータを書き込む
c) 入力装置(正確には入力ポート)から電圧の高/低を読み込む
d) 出力装置(正確には出力ポート)に電圧の高/低を書き込む
のいずれかです。入出力装置に対する読み書きも、主記憶に対する読み書き同様、0と1の組み合わせで行います。(ICの黒い箱から生えている沢山の足の電圧が高くなったり低くなったりすることを想像してください。)
> プログラムがないのに演算ができるんですか!?
すでに述べましたが、CPUは電源が入ったら最初に実行すべき命令がどこに入っているかを知っています。パソコンの場合はBIOSなどが絡んで複雑ですので、比較的単純なマイコンで説明しますと、CPUは電源が入ると最初にメモリの一番最初に入っている命令を読みに行きます。(このアドレスをリセットベクターといいます。)ここには本当に実行すべき命令(プログラム)がメモリのどこから始まっているかを書いておきます。そうすることで、CPUに電源が入ったらどの命令を最初に実行するかを指定することができます。
ということで、CPUはメモリに記憶されたプログラム(命令)に従って動作しています。
参考URL:http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3% …
No.7
- 回答日時:
>電気の高低で全部の数字を表現できても
一応、そこは理解できましたか。
そこの感覚がつかめれば、後の理解は割合と早いです。
ただ、まだ開眼していないというか、
自分で電気回路をつくってしまった方が納得できると思います。
例えば豆電球を用意して、豆電球のオン・オフと+、-の組み合わせで、
答えとなる豆電球が正しく点灯するにはどうするかです。
それが把握できたら、豆電球の数を増やして(桁数を上げる)
2進数2桁の場合はどうかと考えます。
ハード的に電気の動きが理解できれば、いやでも分かるでしょう。
No.5
- 回答日時:
これは・・・!
私が中学1年のときに陥ったのと同じ疑問です。
懐かしいので思わず答えます。
0と1が電圧の高低で区別しているのは、他の方の指摘通りです。
それにトランジスタが絡んでいることも、その通りです。
0と1しかありませんが、
桁をつけることで全部の数字を表現できます(ここが重要)
10進数だって0~9の9個しかありませんが、
10の位や100の位を利用して、どんな大きな数字もできるでしょ
パソコンで動いているものは、全部数値で置き換えられます。
mp3の音楽だって、DVDの動画だって、全部0と1から表現されます。
ここの部分をクリアすると、
次はアナログとデジタルで、アナログって何だ??と悩むことになっています。
回答ありがとうございます。
電気の高低で全部の数字を表現できても、なぜ足し算などの演算ができるのかが疑問なのです。
m(_ _)m
No.4
- 回答日時:
コンピュータがどうやって動いているか考えて見ましょう。
コンピュータを形成する最も基本的な素子は、トランジスタです。
ごく簡単に言うと、トランジスタはスイッチの役割を果たします。このトランジスタを用いると論理回路を作ることができ、論理回路を用いて2進数の演算を行ったり、情報を記憶したりできます。(実際の回路はトランジスタだけでなく、抵抗やコンデンサも含まれています。)
デジタルな電子回路でできているコンピュータはこの論理回路で動いており、論理(真=1、偽=0)を電圧レベルで判断しています。
プログラムなどの情報や命令はメモリの中に0(低い電圧)と1(高い電圧)の組み合わせで記憶されており、CPUはこの0と1の組み合わせを読み込んで、命令に従った演算を行ってます。これが(1)の答えです。(CPUは電圧レベルで0と1を判断しているわけです)
(2)の答えですが、コンピュータ内部では文字を0と1の組み合わせで作った文字コードで扱っているため、改行も空白も0と1の組み合わせで表現されています。
回答ありがとうございます。
う~ん、難しくなってきました。
「トランジスタを用いた論理回路で2進数の演算を行ったりできます。(実際の回路はトランジスタだけでなく、抵抗やコンデンサも含まれています。)」
↑この中に答えが入っているような気がしますが・・・。
簡単にまとめると、「トランジスタを用いた論理回路に電気を流し、01010101・・・1010110・・・(on/off)を繰り返すと足し算や引き算などの演算ができる」ということですか???
その時、プログラムは???
まさか!プログラムがないのに演算ができるんですか!?
No.2
- 回答日時:
マシン語の解説を見ればわかります。
http://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B7% …
この解説は体系的にまとまっているので、
私が説明するよりも数段分かりやすいです。
No.1
- 回答日時:
0と1と言っても、ホントに0と1だけではなくて、
何桁かまとめて使っています。
たとえば、文字コードは8桁か16桁の0か1なんです。
改行であれば、8桁の
00001010(行を変える)
00001101(行頭に戻す)
この2つです。
空白は、00010000です。
全角文字を表すときは、さらに16桁を組み合わせて判別
していますよ。
回答ありがとうございます。
(2)の答えがわかりました。
新たに、00001010で行を変えることができるのか、00001101で行頭に戻ることができるのかという疑問が・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
エクセルVBAのIf,Then 構...
-
一般のソフトで画像を扱う場合...
-
ビットシフトってどんな時使うの?
-
C言語で128bitの2進数のビット...
-
fortranで**の意味は?
-
03分22秒36のような時間の単位...
-
CASLIIでかけ算
-
算術シフト演算が成り立つ理由...
-
fortran
-
音響信号処理をC言語でプログラ...
-
命令について
-
ビット演算子
-
verilog 符号付加減算(最上位...
-
シーケンス制御についての質問...
-
整数除算の意味とは?
-
アセンブラからC言語に変換する...
-
ライン数とステップ数の違いは?
-
Windowsはいったい何言語で書か...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
符号無し整数xを右にnビット回転
-
エクセルVBAのIf,Then 構...
-
ビットシフトってどんな時使うの?
-
一般のソフトで画像を扱う場合...
-
C言語で128bitの2進数のビット...
-
命令について
-
整数除算の意味とは?
-
文字参照は10進数と16進数では...
-
Python: 数値を反転させたい
-
シーケンス制御についての質問...
-
[VBS] 素早くローテート演算したい
-
上位ビットと下位ビットの入れかえ
-
2の補数
-
1の補数
-
ビット演算子
-
03分22秒36のような時間の単位...
-
Javaの問題について
-
コンピュータが処理できるビッ...
おすすめ情報