電子計算機が2進法を使う理由(3) [プログラミングとか]
副題的には「プログラム打ちになってもスクリプトキディになるな」的なアレとか、
例えば(主に若い子・オッサン・ババアでもイイが)「コンピュータってナニしてるの?」とか、
ソレ系の職業に就いてみたけど「やっぱアレが解んね」とか悶絶しているヒトに向けた読み物のヒトツ。
こういう時代なので詳しい話は適当に ggrks というか詳しいヒトに聞いたり書籍を見て頂くにしても、
というか詳しくナニすれば本が一冊どころか数十冊も必要なぐらいのネタを書き留めていくのですが、
そうは言っても「じゃあナニから調べたら良いんだ」ってのが判らないヒトも多いと思うので、
そういう含みもあって長編ではなくライトな読み物で着想が得られるヒトが増えれば良いな的なアレです
…ココまでがテンプレ。
しかしてテンプレがちょっと長いので、次回からナニかしようってか短くしたい(´Д`)
んで、なんだっけ?
前々回 (1) では「数の数え方(2進法)」の話をしたと思いつつ、
前回 (2) では「計算機が2進法を使う理由」の話をしつつ。
んで前回 (2) でハミ出ちゃった論理演算を今回書こうかと思います。
基本的にウチで扱うネタは「軽い読み物」だったり「ソフトウェア屋向け」の話なんで、
ホントはハードウェアにナニをアレするとか諸々の話があるんですが、ソコは省略しますが…
論理演算 : 電子計算機の原点
多くの人に馴染み深い四則演算とは、例えば加算は「数値 A + 数値数 B = 数値 C」という具合で、
「数値 A」と「数値 B」との計算結果を「数 C」に入れるといった約束事で成り立ってる話ですわーね。
ソレに対して論理演算の場合は「数値」ではなく「真偽値」に対する計算の事d
…イキナリ言われても判らんよね真偽値って、とはいえ日本語訳な「真偽値」っていう言葉そのもので、
「真」と「偽」という2つの値しかない真偽値に対する演算が論理演算です。
しかして高校生ぐらいまでは真偽値って言い方で多分習ってないのでピンと来ないかもですが、
ド・モルガンの法則という数学的なアレで実は少なくないヒトが学校で習っている話です。
といってもド・モルガンの法則は何の象形文字だか判らん記法でアレをナニとか仰るので全然判らん、
つーか俺も良く判らんのだけど(笑)、ソレをもう少し平易な書き方と概念の整理をした結果、
電子計算機で言うところの論理演算というカタチで実際に機械が作られることになりました。
つまり真偽値は2つの値しか持たない性質からしても機械(電気)的性質からしても割とうってつけで、
「真偽値 A と 真偽値 B の計算結果を 真偽値 C に保存出来たら夢が広がりんぐwwwって訳ですが、
2つの値しか持たない演算って実際に何を考えるの?って話を続けましょうか。
実は論理演算も四則演算のように、多用される考えは主に4つほどしかありません…が、先にアレか。
実は世の中で「デジタル回路」と言われている物体の根本的な部分は、
上記の4つを実現するハードウェアが中核となって構成されていると言っても言い過ぎではありません。
論理演算を組合せて2進数を算術演算する
一連の連載を適当にまとめると、こんな感じになるんですかね。
電子計算機とは、根本的には(論理演算の結果がどうあれ)コレの繰り返しでずーーーっと動いてます。
真偽値の結果はスイッチのOFF/ONとして表現されたり、2進数として表現されたりとか使途は様々。
真偽値を入れる箱の事を「ビット」と言ったりしますが、この「ビット」を複数個連ねれば連ねた分、
桁数の多い2進数が表現できる訳ですが、例えば16個をまとめると 65536 とおりの数が表現出来ます。
実際の四則演算に対して論理演算をどう組み合わせるのか?は興味あったらお調べ下さいというか、
俺も俺で実はソコまでは簡潔に書けるか微妙なトコロなので適当に逃げるんですがw
最低限、電子計算機の話をする時には「論理演算」の事を知らないと話にならんので、
そういった感じでボチボチと勉強をしたい方は資料を漁ってみてください。
例えば(主に若い子・オッサン・ババアでもイイが)「コンピュータってナニしてるの?」とか、
ソレ系の職業に就いてみたけど「やっぱアレが解んね」とか悶絶しているヒトに向けた読み物のヒトツ。
こういう時代なので詳しい話は適当に ggrks というか詳しいヒトに聞いたり書籍を見て頂くにしても、
というか詳しくナニすれば本が一冊どころか数十冊も必要なぐらいのネタを書き留めていくのですが、
そうは言っても「じゃあナニから調べたら良いんだ」ってのが判らないヒトも多いと思うので、
そういう含みもあって長編ではなくライトな読み物で着想が得られるヒトが増えれば良いな的なアレです
…ココまでがテンプレ。
しかしてテンプレがちょっと長いので、次回からナニかしようってか短くしたい(´Д`)
んで、なんだっけ?
前々回 (1) では「数の数え方(2進法)」の話をしたと思いつつ、
前回 (2) では「計算機が2進法を使う理由」の話をしつつ。
んで前回 (2) でハミ出ちゃった論理演算を今回書こうかと思います。
基本的にウチで扱うネタは「軽い読み物」だったり「ソフトウェア屋向け」の話なんで、
ホントはハードウェアにナニをアレするとか諸々の話があるんですが、ソコは省略しますが…
論理演算 : 電子計算機の原点
多くの人に馴染み深い四則演算とは、例えば加算は「数値 A + 数値数 B = 数値 C」という具合で、
「数値 A」と「数値 B」との計算結果を「数 C」に入れるといった約束事で成り立ってる話ですわーね。
ソレに対して論理演算の場合は「数値」ではなく「真偽値」に対する計算の事d
…イキナリ言われても判らんよね真偽値って、とはいえ日本語訳な「真偽値」っていう言葉そのもので、
「真」と「偽」という2つの値しかない真偽値に対する演算が論理演算です。
しかして高校生ぐらいまでは真偽値って言い方で多分習ってないのでピンと来ないかもですが、
ド・モルガンの法則という数学的なアレで実は少なくないヒトが学校で習っている話です。
といってもド・モルガンの法則は何の象形文字だか判らん記法でアレをナニとか仰るので全然判らん、
つーか俺も良く判らんのだけど(笑)、ソレをもう少し平易な書き方と概念の整理をした結果、
電子計算機で言うところの論理演算というカタチで実際に機械が作られることになりました。
つまり真偽値は2つの値しか持たない性質からしても機械(電気)的性質からしても割とうってつけで、
「真偽値 A と 真偽値 B の計算結果を 真偽値 C に保存出来たら夢が広がりんぐwwwって訳ですが、
2つの値しか持たない演算って実際に何を考えるの?って話を続けましょうか。
実は論理演算も四則演算のように、多用される考えは主に4つほどしかありません…が、先にアレか。
0.「命題に対する真偽」に対する「そもそも」
そもそもナニを以って真偽なの?って部分(=命題)を考えがちになるかもしれません。
人によっては「真 → 正しい? / 偽 → 正しくない?」とかいう話を延々と考えてしまうかもしれません。
例えば「俺はアラフォーオッサン」な命題に対し、「俺 = Nedel の中の人」なら「真」ですが、
「そもそもアラフォーってオッサンなの?」とかいう話を考えだすと止まらないっつーか、
論理演算は「そういう部分」については扱いません。
強引に日本語で書くと「アレかつナニ」とか、「アレまたはナニ」とか、「アレでないナニ」とかいう、
既に真偽的に何らかの分類済のアレをナニした時にはどーなる?って話ではあるのですが、
実は論理演算した際の答え(=真偽表)は予め決まってたりしますので覚えれ、と説教されますw
ちなみに、「真と偽」という2つの状態が管理できる機械があれば…という話ですが。
Low を真とするか、High を真とするかは意図(設計)等に依存する
機械構造やら電子回路の組み方とかで Low や High の真偽をどっちがどっち?ってのは
現場では揉めるネタになるというか、「どっち?」を予め決めておいた方が良かったり、
それこそソフトウェアを作るって話だと普通にバグの温床だったりする箇所です。
一応は用語的にも「ドッチがドッチ」っていう言い方はあって、以下の様な用語を使います。
「真偽」という言葉で覚えづらかったら「Yes No」とか「True False」とか「はい いいえ」とか、
つまり二択の答えをする際に使うナニかを当てはめて覚えれば実質的に問題ないです。
そもそもナニを以って真偽なの?って部分(=命題)を考えがちになるかもしれません。
人によっては「真 → 正しい? / 偽 → 正しくない?」とかいう話を延々と考えてしまうかもしれません。
例えば「俺はアラフォーオッサン」な命題に対し、「俺 = Nedel の中の人」なら「真」ですが、
「そもそもアラフォーってオッサンなの?」とかいう話を考えだすと止まらないっつーか、
論理演算は「そういう部分」については扱いません。
強引に日本語で書くと「アレかつナニ」とか、「アレまたはナニ」とか、「アレでないナニ」とかいう、
既に真偽的に何らかの分類済のアレをナニした時にはどーなる?って話ではあるのですが、
実は論理演算した際の答え(=真偽表)は予め決まってたりしますので覚えれ、と説教されますw
ちなみに、「真と偽」という2つの状態が管理できる機械があれば…という話ですが。
Low を真とするか、High を真とするかは意図(設計)等に依存する
機械構造やら電子回路の組み方とかで Low や High の真偽をどっちがどっち?ってのは
現場では揉めるネタになるというか、「どっち?」を予め決めておいた方が良かったり、
それこそソフトウェアを作るって話だと普通にバグの温床だったりする箇所です。
一応は用語的にも「ドッチがドッチ」っていう言い方はあって、以下の様な用語を使います。
High が真、Low が偽 → 正論理
High が偽、Low が真 → 負論理(逆論理…というヒトもいる)
High が偽、Low が真 → 負論理(逆論理…というヒトもいる)
「真偽」という言葉で覚えづらかったら「Yes No」とか「True False」とか「はい いいえ」とか、
つまり二択の答えをする際に使うナニかを当てはめて覚えれば実質的に問題ないです。
1.OR (「おあ」「論理和」「または」ってアレ)
「真偽値:アレ」と「真偽値:ナニ」の2つがあった際に、「アレまたはナニ」の結果は以下のとおり。
ちなみに「真偽値が3つあったら?」というツッコミがあるかもしれませんが、
「2つの結果と残り1個の結果で再度評価する」(ド・モルガンの法則でも見やがれ)なので、
基本的には2つの真偽値における組み合わせを覚えておけば充分です。
「または」って日本語訳のとおりで、例えば二人がいて片方が「YES !!」と言ってしまうと、
連帯責任的に「(お前ら全員)イイんです!」って受け取られちゃうアレの現象です。
「真偽値:アレ」と「真偽値:ナニ」の2つがあった際に、「アレまたはナニ」の結果は以下のとおり。
ちなみに「真偽値が3つあったら?」というツッコミがあるかもしれませんが、
「2つの結果と残り1個の結果で再度評価する」(ド・モルガンの法則でも見やがれ)なので、
基本的には2つの真偽値における組み合わせを覚えておけば充分です。
アレ | ナニ | OR 結果 |
---|---|---|
偽 | 偽 | 偽 |
真 | 偽 | 真 |
偽 | 真 | 真 |
真 | 真 | 真 |
「または」って日本語訳のとおりで、例えば二人がいて片方が「YES !!」と言ってしまうと、
連帯責任的に「(お前ら全員)イイんです!」って受け取られちゃうアレの現象です。
2.AND (「あんど」「論理積」「かつ」ってナニ)
「真偽値:アレ」と「真偽値:ナニ」の2つがあった際に、「アレかつナニ」の結果は以下のとおり。
「かつ」って日本語訳のとおりで、例えばカップルの片方が「YES !!」と言っても、
もう片方が「No」の枕を出してたらそりゃダメっすよね…ってなるアレのようなモンです。
「真偽値:アレ」と「真偽値:ナニ」の2つがあった際に、「アレかつナニ」の結果は以下のとおり。
アレ | ナニ | AND 結果 |
---|---|---|
偽 | 偽 | 偽 |
真 | 偽 | 偽 |
偽 | 真 | 偽 |
真 | 真 | 真 |
「かつ」って日本語訳のとおりで、例えばカップルの片方が「YES !!」と言っても、
もう片方が「No」の枕を出してたらそりゃダメっすよね…ってなるアレのようなモンです。
3.NOT (「のっと」「反転」「でない」ってソレ)
とある真偽値に対して「じゃねーよ」ってちゃぶ台返しする、という論理演算があります。
「反転」って日本語訳のとおりですが、わざわざこの「ちゃぶ台返し」が定義されているのは、
OR とか AND だと基本的に「勃つ」のが専門で、その逆動作を入れておかないと面倒くさい…?w
何れにせよ、この「NOT」が無いと実際に色々と面倒です。
とある真偽値に対して「じゃねーよ」ってちゃぶ台返しする、という論理演算があります。
アレ | NOT 結果 |
---|---|
偽 | 真 |
真 | 偽 |
「反転」って日本語訳のとおりですが、わざわざこの「ちゃぶ台返し」が定義されているのは、
OR とか AND だと基本的に「勃つ」のが専門で、その逆動作を入れておかないと面倒くさい…?w
何れにせよ、この「NOT」が無いと実際に色々と面倒です。
4.XOR (「えっくすおあ」「排他論理和」ってカレ)
和訳のとおり若干変わった論理和でして、「だが断るっ!」と言われちゃう感じの論理演算です。
演算結果は論理和にだいたい似ているのですが、1箇所違う場所があります。
2人揃って「結婚します !!」と言ったものの「だが断る!」と排他的な事をされちゃう感じの結果です。
「リア充爆発しろ」「娘は渡さん!」なのか理由は知りませんし、使いドコロって?と思うかもですが、
この論理演算は前述の「OR」「AND」「NOT」と組み合わせて2進数の四則演算を行う際に必要です。
和訳のとおり若干変わった論理和でして、「だが断るっ!」と言われちゃう感じの論理演算です。
演算結果は論理和にだいたい似ているのですが、1箇所違う場所があります。
アレ | ナニ | XOR 結果 |
---|---|---|
偽 | 偽 | 偽 |
真 | 偽 | 真 |
偽 | 真 | 真 |
真 | 真 | 偽 |
2人揃って「結婚します !!」と言ったものの「だが断る!」と排他的な事をされちゃう感じの結果です。
「リア充爆発しろ」「娘は渡さん!」なのか理由は知りませんし、使いドコロって?と思うかもですが、
この論理演算は前述の「OR」「AND」「NOT」と組み合わせて2進数の四則演算を行う際に必要です。
実は世の中で「デジタル回路」と言われている物体の根本的な部分は、
上記の4つを実現するハードウェアが中核となって構成されていると言っても言い過ぎではありません。
論理演算を組合せて2進数を算術演算する
一連の連載を適当にまとめると、こんな感じになるんですかね。
1.とにかく真偽値を入れる箱を沢山用意する
2.論理演算を組合せて四則演算を可能にする
2.論理演算を組合せて四則演算を可能にする
電子計算機とは、根本的には(論理演算の結果がどうあれ)コレの繰り返しでずーーーっと動いてます。
真偽値の結果はスイッチのOFF/ONとして表現されたり、2進数として表現されたりとか使途は様々。
真偽値を入れる箱の事を「ビット」と言ったりしますが、この「ビット」を複数個連ねれば連ねた分、
桁数の多い2進数が表現できる訳ですが、例えば16個をまとめると 65536 とおりの数が表現出来ます。
実際の四則演算に対して論理演算をどう組み合わせるのか?は興味あったらお調べ下さいというか、
俺も俺で実はソコまでは簡潔に書けるか微妙なトコロなので適当に逃げるんですがw
最低限、電子計算機の話をする時には「論理演算」の事を知らないと話にならんので、
そういった感じでボチボチと勉強をしたい方は資料を漁ってみてください。