2chの男女恋愛に関わる 復讐話寝取られ話旅スレ に特化した話題を掲載していきます。
easterEgg
 
 
 
 
 

プログラムってなんで動くの?
(2ページ目)  最初から読む >>

 

\ シェアする /


80 :以下、名無しにかわりましてVIPがお送りします:2013/12/11(水) 23:57:07.75 ID:v8bm93dr0
以上の3つを表にする 

0が電気来てない状態 つまりOFF  

1が電気来てる状態 ONだな

X Yがそれぞれ独立した入力 Zが出力だ


AND

X  Y   Z

0   0   0
0   1   0
1   0   0
1   1   1

OR

X  Y   Z

0   0   0
0   1   1
1   0   1
1   1   1

NOT

X   Z

0   1
1   0
NOTは入力が1つしか無いからYは無しな


まとめただけだがここまでおk?



81 :以下、名無しにかわりましてVIPがお送りします:2013/12/11(水) 23:58:35.29 ID:ok44i40T0
>>80
ここまではわかる。



91 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 00:05:34.27 ID:+owZ8Gmq0
AND OR NOT じゃ書きにくいので

横書きでは算術記号を使って以下のように書く

A AND B → A・B

A OR B →   A+B

NOT A →   ¬A

     _

NOT A は A (えーばー)と表すのが簡単で一般的だが ここでは書き込みの関係上¬を使わせてくれ

あと 数学と同じように()を使ったりもする

もちろん()を先に計算する


A=1 B=0 のとき A+B=1 A・B=0 ということだね

同様に (A+B)・B=1 (A・B)+B=0

ここまでおk?



102 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 00:17:55.58 ID:+owZ8Gmq0
論理回路の基本的な表記方法は以上だ

あとはこの素子を複雑に組み合わせることで計算機ができる

さっきの例の()を使った問題のように素子の出力をさらに次の素子の入力にしていって

組み合わせていくだけだ

たとえば半加算器(下位からの繰り上がりなしの2進数の足し算をするもの)はすごくシンプルな作りだ

さっきみたいに表にすると


半加算器

A  B   C S

0   0   0 0
0   1   0 1
1   0   0 1
1   1   1 0

2進数でA+B (この+はANDじゃなくて足し算の意味) を計算するってことは つまり上の表のような入力ABに対してSCのような2つの出力をすればいいわけだ

Cが繰り上がりの桁 Sが計算結果の桁だ

上から順に 0+0 = 00、 0+1 = 01、 1+0 = 01、 1+1 = 10 

の計算に対応してるわけだ

ちなみにこの半加算器での出力Sは>>95の言う XOR の出力と同じものだ



106 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 00:25:39.53 ID:+owZ8Gmq0
下位からの繰り上げを考慮した全加算器というものもある

半加算器を組み合わせた単純な構造だから

つまりはこれもAND OR NOT の3つだけで作れるということだ

引き算は2進数の特徴(2の補数)を利用してやれば 同様の機械で実現できる

掛け算割り算も同様に3つの素子だけで作れるがかなり複雑になるので割愛 

気になるなら乗算器でググってくれ


基本的な考え方は

1. 求めたい出力を表にする

2. 必要な入力を考える

3. それらを論理演算で実現できる素子の並びを考える

この工程を繰り返してどんどん高機能な素子の塊を組み上げていくわけだ

ここまでおk?

それとも需要ない?



109 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 00:30:06.41 ID:/Cad/v4/0
親がエンジニアなのに何言ってるかチンプンカンプンだわ



110 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 00:31:19.78 ID:+owZ8Gmq0
そうか 俺の解説じゃダメか・・・



113 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 00:34:19.91 ID:KLfKFpY20
>>110
いや、すごくわかりやすいと思う。それが大元なのが理解できた。


126 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 00:46:06.65 ID:+owZ8Gmq0
>>113
需要あるなら調子に乗って書いちゃう



CPUってのは基本的に

指示された命令を上から順番に実行していくわけだが

具体的にはイカのサイクルを延々と繰り返すだけだ

・必要な情報(数値など)を指示された場所から読み出す

・読みだした値を指示された方法で計算する

・計算結果を指示された場所に保存する

・次の命令を読み込む


CPUは予め決められた命令と動作を自分で覚えてて 例えば

1番の命令が来たら 与えられた数値ABを足しなさい 結果はCに保存

2番の命令が来たら 与えられた数値ABを掛けなさい 結果はCに保存

3番の命令が来たら Aの場所からデータを読み出しなさい 読みだしたものはBに保存

・・・

と 命令番号と動作が決まっているわけだ

ここでCPUに与えてやらないといけない情報は 大きくわけて

・計算方法(足し算引き算 データ読み出し)
・読み出すデータ

・保存場所

になるわけだ


ここまでおk?



118 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 00:39:22.68 ID:jsrq9IbA0
>>110
すごく初心者向けだと思うよ。


117 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 00:39:22.73 ID:v8L5JsYs0
コンパイルってよくわからんけど必要な言語と必要ない言語があるじゃん?

あれなんでなの?

必要ない言語は優秀なの?


120 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 00:40:35.22 ID:UxydwCby0
>>117
機械語以外のコンピュータ言語である以上コンパイルは必ず必要で 実行しながらコンパイルするか、実行する前にコンパイルするかの違い

Ruby とか Perl のインタプリタ言語は前者


121 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 00:40:36.88 ID:k8ihlZ/p0
>>117
必要ない言語は実行時にコンパイルしてる

いわゆるインタプリタと呼ばれるやつ

JITとは違う


124 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 00:42:58.24 ID:v8L5JsYs0
>>120-121
なるほど、見かけ上必要ないだけで実際には勝手にやってくれてるのか

ありがとう


129 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 00:54:13.88 ID:+owZ8Gmq0
CPUに与える情報というのはどこかに保存してあるわけだがそれがメモリってやつだ

お前らのPCにも2Gとか4Gとか ちょっといいやつは8Gとか積んであるだろう それだ

そこに必要な情報を一時保存しているわけだ

例えるならお前らが2桁の足し算をする時に繰り上がりとかを一瞬覚えておくためのような場所だ

で そのメモリ上には1と0が延々並んでいるわけだがそのすべてに住所のようなものが決められていて

例えば3番の場所 といえば必ず1つの場所を指し その内容が1か0かわかるわけだ

この住所を使って ほしい情報がどこにあるのかをCPUに教えてやることができる

この住所が指す場所から情報を読み出せば ほしい情報が手に入るってわけだな

これが >>126 の読みだすデータの場所ってことだ

ここまでおk?



133 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 00:59:46.62 ID:+owZ8Gmq0
保存場所も同様にメモリ上の住所で指定してやればいいから簡単だな

これら3つ (・計算方法 ・読み出すデータの住所 ・保存する住所) をCPUに与えてやれば

あとはCPUが 予め知ってる手順に従って CPUの中の回路を決められた手順で使って計算してくれる

そして計算結果を 指定の場所に保存してくれるわけだ

それが終わると CPUは次の命令をメモリ上から自動的に読み込んでまた同じように実行する

以上でCPUの動きの説明は終了

質問あれば分かる範囲で答える



134 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 01:01:33.61 ID:brn/ZTBs0
ほうほう


135 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 01:01:46.58 ID:/j4IrpsuI
>>ID:+owZ8Gmq0
読んでるぞー

こうしてみると、コンピーターってのはすごい単純な仕組みの膨大な集大成なんだなあというのがらわかるね


139 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 01:06:30.78 ID:+owZ8Gmq0
あと 実際は>>96のいうように

すべての回路はNAND(=NOT (A AND B) )素子だけで作れて

NANDは小さくて安いという理由(だっけ?)でほぼNANDのみで構成されている

ただし回路図はめちゃくちゃ見難くなる



142 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 01:09:18.36 ID:0FCkzEIm0
仕事でJavaのプログラミングしてた時これ気になったな

でも「そういうもんだ」ということですぐに納得した


143 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 01:09:45.10 ID:DH4VtYlO0
素子とボードある人はnビット加減算機つくってごらん

コンピュータの本質がわかるから


まずは簡単なn=4ぐらいから始めてみると良い


145 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 01:14:25.86 ID:+owZ8Gmq0
読み返してみると 半加算器の説明が雑だったかな


半加算器の回路図は下のようになる
ただし
http://web-mondai.com/upload/00617/00617_1278466610_20a_17_02.png

これが OR を計算する素子


http://web-mondai.com/upload/00617/00617_1278466580_20a_17_01.png

これが AND を計算する素子だ


そして

http://2.bp.blogspot.com/-R39vZtYmYkc/TryMGPAYLjI/AAAAAAAAAM8/zKroMLo2IUg/s320/not.png

これが NOT を表す素子だ


http://upload.wikimedia.org/wikipedia/ja/6/64/Half_adder.png

この図のように素子を組み合わせると半加算器ができる


式で書くと

S = ¬A・B + A・¬B

C = A・B



150 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 01:28:33.18 ID:vuqw8sfj0
自分でZ80買ってきて一本一本配線してマイコン作ってコンピューターがどうやって動くのか実感したもんだけど今の子たちはそういう経験しようったって無理だもんな


151 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 01:29:40.30 ID:+owZ8Gmq0
>>150
やろうと思えば出来なくはないけどな



153 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 01:35:01.32 ID:jsrq9IbA0
>>150
秋月辺りでマイコン買ってきてアセンブラで作れば同じだと思うよ、バイナリなんてどうでもいいことだし。


154 :以下、名無しにかわりましてVIPがお送りします:2013/12/12(木) 01:55:32.57 ID:Hd9a1Xxx0
プログラム書いてて裏で動いてる論理回路の事気にすることはなかったけどもゲーム内で回路組んだり配線したりしてるうちに気になるようになってきたなあ

 
カテゴリー:コンピュータ  |  タグ:ためになる話,
 


\ シェアする /


関連記事

 

easterEgg記事特集ページ

 

こちらもどうぞ

 

 

カテゴリー

 

 
 

殿堂入りのおすすめ記事

 
 
 

新着記事

 
 
 

おすすめ記事2

 

 

人気記事(7days)

 

 

新着記事