論理演算と真理値表の読み方:AND・OR・XOR・ド・モルガンの法則完全マスター
「どちらかが真」と「片方だけが真」は、何が違うのでしょうか?
ORは両方が真でも真、XORは両方が真なら偽です。真理値表で違いを確かめ、ド・モルガンの法則とビットのマスク操作へ進みます。
4大基本論理演算(AND・OR・XOR・NOT)とベン図
まず、すべての論理演算の基本となる 4 つの演算を整理しましょう。
論理演算 | 数学記号 / 記法 | 出力が 1 (真) になる条件 | 日常会話での感覚 | 実務・システムでの代表的用途 |
|---|---|---|---|---|
AND (論理積) | A ∧ B, A · B | A と B の【両方】が 1 のときのみ | 「パスワードが合致」かつ「二段階認証が合致」 | 特定ビットの抽出(ビットマスク)、条件の絞り込み |
OR (論理和) | A ∨ B, A + B | A または B の【少なくとも一方】が 1 のとき | 「管理者権限がある」または「作成者本人である」 | 特定ビットを1にセット、複数の許容条件 |
XOR (排他的論理和) | A ⊕ B | A と B の【値が異なるとき】(片方だけが1) | 「AランチかBランチのどちらか一方のみ選択」 | 特定ビットの反転、暗号化/復号(同一鍵で元に戻る)、パリティ検査 |
NOT (否定) | ¬A, Ā (オーバーライン) | A が 0 のときは 1、1 のときは 0 | 「会員ではない」「未ログインである」 | 真偽の反転、ビット反転(1の補数計算) |
【発展:NAND と NOR】:AND の出力を反転したものを NAND(否定論理積: ¬(A ∧ B))、OR の出力を反転したものを NOR(否定論理和: ¬(A ∨ B)) と呼びます。
特に NAND 回路は、組み合わせるだけですべての論理ゲート(NOT、AND、OR、XOR)を構成できる「万能ゲート」としてハードウェア設計で重宝されます。
ド・モルガンの法則:複雑な否定式を劇的に簡単化する
論理演算の中で最も受験生が混乱しやすく、かつ頻出なのが「ド・モルガンの法則(De Morgan's laws)」です。
ド・モルガンの基本公式
¬(A ∧ B) = ¬A ∨ ¬B (「AかつB」の否定 = 「Aでない」または「Bでない」)
¬(A ∨ B) = ¬A ∧ ¬B (「AまたはB」の否定 = 「Aでない」かつ「Bでない」)
直感的に理解するコツ:傘の開閉
式全体にかかっている否定の長いバー(¬ または括弧)を外して個々の変数に分割するとき、「中央の演算子(∧ と ∨)が必ず逆転する」と覚えましょう。
A | B | A ∨ B | ¬(A ∨ B) 【左辺】 | ¬A | ¬B | ¬A ∧ ¬B 【右辺】 | 等値の確認 |
|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 1 | 1 | 1 | 一致 (1 = 1) |
0 | 1 | 1 | 0 | 1 | 0 | 0 | 一致 (0 = 0) |
1 | 0 | 1 | 0 | 0 | 1 | 0 | 一致 (0 = 0) |
1 | 1 | 1 | 0 | 0 | 0 | 0 | 一致 (0 = 0) |
すべての行で左辺と右辺の出力が完全に一致することが確認できます。
プログラムで複雑な if (!(isMember || hasCoupon)) を if (!isMember && !hasCoupon) に書き換える際などに必須の知識です。
コンピュータでの実戦応用:ビットマスク(Bitmask)処理
プログラミングやOSの制御で最も頻繁に用いられる論理演算の技法が「ビットマスク(Bitmask)」です。特定の桁のビットを取り出したり、強制的に変更したりする操作です。
実現したい操作 | 使用する論理演算 | マスクパターンの作り方 | 計算例(対象: 0b10110110) |
|---|---|---|---|
特定ビットの抽出 | AND (論理積) | 抽出したい位置を 1、不要な位置を 0 | 0b10110110 & 0b00001111 → 下位4ビット 0b00000110 を抽出 |
特定ビットを 1 にセット | OR (論理和) | 1 にしたい位置を 1、維持する位置を 0 | 0b10110110 | 0b00000001 → 最下位ビットを強制的に 1 に変更 |
特定ビットの反転 (トグル) | XOR (排他論理和) | 反転したい位置を 1、維持する位置を 0 | 0b10110110 ^ 0b00001111 → 下位4ビットを反転 |
特定ビットを 0 にクリア | AND + NOT | クリアしたい位置を 0、維持する位置を 1 | 0b10110110 & ~0b00000010 → 第2ビットを強制的に 0 に変更 |
実戦演習:論理式の簡単化問題を解いてみよう
次の論理式を簡単化したものとして、最も適切なものを選択肢から選んでみましょう。
X = (A ∧ B) ∨ (A ∧ ¬B)【選択肢】
A
B
A ∧ B
A ∨ B
解説と解答
正解:ア(A)
解法①:ブール代数の公式(分配法則)で解く
共通因数 A で式をくくります:X = A ∧ (B ∨ ¬B)
B ∨ ¬B は「Bが1またはBが0」という意味なので、常に真(1)になります。
したがって、X = A ∧ 1 = A となり、正解はアです。
解法②:真理値表を書いて解く(確実な検算)
A | B | ¬B | A ∧ B | A ∧ ¬B | X = (A ∧ B) ∨ (A ∧ ¬B) | 判定結果 |
|---|---|---|---|---|---|---|
0 | 0 | 1 | 0 | 0 | 0 | Aの値 (0) と一致 |
0 | 1 | 0 | 0 | 0 | 0 | Aの値 (0) と一致 |
1 | 0 | 1 | 0 | 1 | 1 | Aの値 (1) と一致 |
1 | 1 | 0 | 1 | 0 | 1 | Aの値 (1) と一致 |
真理値表の出力列 X が、入力列 A と完全に一致していることが一目で分かります。公式を忘れても真理値表を書けば確実に正解にたどり着けます。
ビットのマスク操作を8ビットの値で確認する
値を0xB6(10110110₂)とします。論理型のAND・ORと、ビット列の各桁に作用するAND・ORを区別します。
目的 | 計算 | 結果 |
|---|---|---|
下位4ビットだけ残す | 0xB6 AND 0x0F | 0x06 |
最下位を1にする | 0xB6 OR 0x01 | 0xB7 |
下位4ビットを反転 | 0xB6 XOR 0x0F | 0xB9 |
下から2番目を0にする | 0xB6 AND 0xFD | 0xB4 |
8ビットのNOTなら0x02の反転は0xFDです。Pythonなどの整数の~演算では固定8ビットとは限らないため、必要なら0xFFで範囲を制限します。
XORを使うだけで安全な暗号になるわけではありません。同じ短い鍵を繰り返す単純なXORは、情報が推測される危険があります。暗号方式の安全性とビット演算の性質は別です。
まとめ:論理演算を解くチェックシート
AND は「両方1」、OR は「片方でも1」、XOR は「違えば1」。
ド・モルガンは「全体否定を分けるとき、ANDとORが入れ替わる」。
ビット抽出は AND、ビットセットは OR、ビット反転は XOR。
迷ったら 0 と 1 を代入して 4 行の真理値表を手元に書く。
出典と仕様を確認する
IPA:FEシラバス Ver.9.2
Python公式:整数のビット演算
次におすすめの学習
編集・検証について
編集・検証:IT資格ラボ編集部
IPAが公開する試験要綱・シラバス・過去問題と、各技術の公式資料を優先して内容を確認しています。制度変更や誤りを確認した場合は、記事を見直して更新します。
編集方針・情報源・訂正方針を見る