基礎知識の欄にありますがこれは分かり難い物なので
初めて解析をしますという人は読み飛ばして下さい
深くやり込みたい人だけ読んで下さい。
改造コードでもちらほらと出てくる論理演算
これは値を2進数(ビット単位)で
法則に沿って計算するという物です。
論理演算は全部で6種類(だったハズ)
コードに関係する物で憶えておきたい物は
「論理和」「論理積」「排他的論理和」の3種類ですが
PS2ではたまに「否定論理和」も使われているので
全部で4種類を覚えればよいという事になります。
それでは各種演算方法を図付きで解説します
出てくる数値は全て2進数状態での説明になるので
16進数などと混合しないように気を付けて下さい。
・論理和(OR演算)
「どちらか一方の値が1(真)であれば1(真)とし
0(偽)同士の場合はそのまま0(偽)とする」
「10010101」と「01110001」をorすると
「11110101」という計算結果になります。
X | Y | X or Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
・論理積(AND演算)
「双方の値が1(真)であれば1(真)とし
一方が0(偽)、または0(偽)同士の場合は0(偽)とする」
「10010101」と「01110001」をANDすると
「00010001」という計算結果になります。
X | Y | X and Y |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
・排他的論理和(XOR演算)
「どちらか一方の値が1(真)であれば1(真)とし
双方が0(偽)か1(真)同士の場合は0(偽)とする」
「10010101」と「01110001」をXORすると
「11100100」という計算結果になります。
X | Y | X xor Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
・否定論理和(NOR演算)
「双方の値が0(偽)であれば1(真)とし
一方が1(真)、または双方が1(真)の場合は(偽)とする」
「10010101」と「01110001」をNORすると
「00001010」という計算結果になります。
X | Y | X nor Y |
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
余談ですが、論理積や排他的論理和は算数に使われるだけではなく
日常会話の中にもさりげなく混ざっている物だったりします。
論理積なら「〜且つ」という意味があり、例えば
「ファ○通は面白くて、且つ値段も手ごろです」
というのは実は論理積だったりします。
面白いがX、安いがY、それをANDしたのがファ○通
でもどちらかが欠けるとファ○通ではなくなるという意味です。
論理和は「〜または」という意味があり
「連絡はメール、または電話にてお願いします」という会話も
メールがX、電話がY、それをORすると
どちらでも連絡が付きますよという意味になります。
排他的論理和も「〜または」という意味がありますが
これは「どちらか一方だけ」と制限があり
「千円と二千円の割引サービスは同時に利用できません」
などが排他的論理和に当てはまります。