微積分と物理​/論理3 のバックアップ差分(No.2)

Unity学習帳2冊目微積分と物理 / 論理3 のバックアップ差分(No.2)
« Prev  Next »
1: 2015-08-26 (水) 20:40:59 osinko ソース 2: 2015-08-26 (水) 22:19:08 osinko ソース
Line 1: Line 1:
TITLE:微積分と物理/論理3 TITLE:微積分と物理/論理3
 +#jsmath
 +**論理表(ビット演算) [#odf9d821]
こちらはC#のビット演算向きに論理表を書いています こちらはC#のビット演算向きに論理表を書いています
 +
 +|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|c
 +|論理式|<|<|\(\neg A\)|\(A\wedge B\)|\(A\vee B\)|\(A \underline{\vee}B\)|\(A\rightarrow B\)|\(A\leftrightarrow B\)|
 +|日本訳|<|<|でない|かつ|または|排他|ならば|双条件|
 +|C#ビット演算|<|<|(~A)|(A&B)|(A|B)|(A^B)|(~A|B)|((~A|B)&(~B|A))|
 +|A|B|| | | | | | |
 +|1|1||0|1|1|0|1|1|
 +|1|0||0|0|1|1|0|0|
 +|0|1||1|0|1|1|1|0|
 +|0|0||1|0|0|0|1|1|
 +
 +<メモ>
 +-論理式は括弧の一番深い所から計算を始める
 +-A,BやP,Q,R等を原子式と呼ぶ。原始式にひとつだけ\(\neg\)をつけて作られる\(\neg P \)や\(\neg Q \)のような論理式をリテラルと呼ぶ。\( P,Q,\neg P,\neg P \)などがリテラルとなる
 +-日本語の断言や断定は独立したリテラルとなる(かならずしも「ならば」が利用される訳でない)
 +-「したがって」と「ならば(\(\rightarrow \))」は違う
 +-日本語の句読点(、。)によって終端がはっきりしていれば、そこで論理式による人工言語も「\(,\)」によって区切られる
 +
 +***真理値分析の真理表 [#o165592c]
 +
 +例:\(\neg ((P\wedge (P\rightarrow Q))\rightarrow R)\)の真理値分析の為の真理表を完成させよ
 +
 +|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|c
 +|\(P\)|\(Q\)|\(R\)|\(P\rightarrow Q \)|\( P\wedge (P\rightarrow Q) \)|\( (P\wedge (P\rightarrow Q))\rightarrow R\)|\(\neg ((P\wedge (P\rightarrow Q))\rightarrow R)\)|
 +|1|1|1| | | | |
 +|1|1|0| | | | |
 +|1|0|1| | | | |
 +|1|0|0| | | | |
 +|0|1|1| | | | |
 +|0|1|0| | | | |
 +|0|0|1| | | | |
 +|0|0|0| | | | |
 +
 +原子式がP,Q,Rと3つある時、その真理値の組み合わせは8通りとなる。これを順序良く漏れなく組み合わせを書くには、ある法則に従って書くと良い。1番右のRは1を始めにして1と0を交互に書く。次のQは1を始めとして1と0を二個ずつ交互に書く。次のPは1と0を4個ずつ交互に書く。そうすると8つの場合が綺麗に並ぶことになる
 +
 +真理分析を行う際は論理式の括弧の内側から計算を始める。\(\neg ((P\wedge (P\rightarrow Q))\rightarrow R)\)の場合、\(P\rightarrow Q \)から始める。C#で計算させる場合でも同様、式の変換は括弧の内側から始める。下記のコードのtotal部分がこの論理式をまとめて書いたものになっている。この時、括弧の計算範囲をしっかり把握し区切る事が重要になっている
 +
 +この論理表の作成にC#を利用してコーディングすると以下になる
 +
 +#code(csharp){{
 +using UnityEngine;
 +using System.Collections;
 +using System;
 +
 +public class Logic2 : MonoBehaviour
 +{
 +    int mask, p, q, r;
 +
 +    void Start ()
 +    {
 +     //2進数でint値を設定
 +
 +     p = Convert.ToInt32 ("11110000", 2);
 +     q = Convert.ToInt32 ("11001100", 2);
 +     r = Convert.ToInt32 ("10101010", 2);
 +
 +     //ビットマスク
 +     mask = Convert.ToInt32 ("11111111", 2);
 +
 +     int PconditonalQ = (~p | q) & mask; // p⇒q
 +     int PconjunctionPconditonalQ = (p & PconditonalQ) & mask; // p^(p⇒q)
 +     int PconjunctionPconditonalQconjunctionR = (~PconjunctionPconditonalQ | r) & mask; // (p^(p⇒q))⇒r
 +     int negationPconjunctionPconditonalQconjunctionR = ~PconjunctionPconditonalQconjunctionR & mask; // ¬((p^(p⇒q))⇒r)
 +
 +     int total = (~(~(p & (~p | q)) | r)) & mask; //¬((p^(p⇒q))⇒r)
 +
 +     print (Convert.ToString (PconditonalQ, 2).PadLeft (8, '0'));
 +     print (Convert.ToString (PconjunctionPconditonalQ, 2).PadLeft (8, '0'));
 +     print (Convert.ToString (PconjunctionPconditonalQconjunctionR, 2).PadLeft (8, '0'));
 +     print (Convert.ToString (negationPconjunctionPconditonalQconjunctionR, 2).PadLeft (8, '0'));
 +     print (Convert.ToString (total, 2).PadLeft (8, '0'));
 +    }
 +}
 +}}
 +
 +計算結果は以下になる。コードの出力した結果と見比べてみて欲しい
 +|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|c
 +|\(P\)|\(Q\)|\(R\)|\(P\rightarrow Q \)|\( P\wedge (P\rightarrow Q) \)|\( (P\wedge (P\rightarrow Q))\rightarrow R\)|\(\neg ((P\wedge (P\rightarrow Q))\rightarrow R)\)|
 +|1|1|1|1|1|1|0|
 +|1|1|0|1|1|0|1|
 +|1|0|1|0|0|1|0|
 +|1|0|0|0|0|1|0|
 +|0|1|1|1|0|1|0|
 +|0|1|0|1|0|1|0|
 +|0|0|1|1|0|1|0|
 +|0|0|0|1|0|1|0|
 +
 +文法はシンタックス。その文の意味をセマンティクスと呼ぶ。たとえば文の書き方が間違っていた場合、シンタックスエラーになる。その文の意味の解釈が間違っていた場合はセマンティクスエラーとなる
« Prev  Next »


トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom