逻辑运算

基本运算

逻辑运算 含义 逻辑表达式 运算符
A AND B $F = A \cdot B$ a & b
A OR B $F = A + B$ a | b
NOT A $F = \bar{A}$ !a
异或 A XOR B $F = \bar{A}B + A\bar{B} = A \oplus B$ a ^ b
同或 A XNOR B $F = AB + \bar{A}\bar{B} = A \odot B =\overline{A\oplus B}$

基本公式

运算法则
交换律 $A+B=B+A$ $AB=BA$
结合律 $A+(B+C)=(A+B)+C$ $A(BC)=(AB)C$
分配律 $A(B+C)=AB+AC$ $A+(BC)=(A+B)(A+C)$
吸收律 $A+AB=A$ $A(A+B)=A$
0-1 $A+1=1,A+0=A$ $A\cdot1=A,A\cdot0=0$
互补律 $A+\bar{A}=1$ $A\cdot\bar{A}=0$
重叠律 $A+A=A$ $AA=A$
反演律 $\overline{A+B}=\bar{A}\cdot\bar{B}$ $\overline{AB}=\bar{A}+\bar{B}$
包含律 $AB+\bar{A}C+BC=AB+\bar{A}C$ $(A+B)(\bar{A}+C)(B+C)=(A+B)(\bar{A}+C)$

分配律

与运算对异或运算的分配律

$$ \begin{aligned} (AB) \oplus (AC) &= \overline{AB}AC + AB\overline{AC} \\ &=(\bar{A}+\bar{B})AC + AB(\bar{A}+\bar{C}) \\ &=A\bar{B}C+AB\bar{C}\\ &=A(\bar{B}C+B\bar{C}) \\ &=A(B \oplus C) \end{aligned} $$

或运算对异或运算的分配律 (不满足)

$$ \begin{aligned} (A+B)\oplus(A+C) &= \overline{A+B}(A+C) + (A+B)\overline{A+C} \\ &=\bar{A}\bar{B}(A+C) + (A+B)\bar{A}\bar{C} \\ &=\bar{A}\bar{B}C+\bar{A}B\bar{C} \\ &=\bar{A}(\bar{B}C+B\bar{C}) \\ &=\bar{A}(B \oplus C) \neq A + (B \oplus C) \end{aligned} $$
$$ \begin{aligned} \overline{\bar{A}(B \oplus C)} &= A + \overline{B \oplus C}=A+ B\odot C \end{aligned} $$

真值表

$$ \begin{array}{|c|cccccccc|} \hline & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 \\ \hline A & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\ B & 0 & 0 & 1 & 1 & 0 & 0 & 1 & 1 \\ C & 0 & 1 & 0 & 1 & 0 & 1 & 0 & 1 \\ \hline \bar{A} & 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\ \bar{B} & 1 & 1 & 0 & 0 & 1 & 1 & 0 & 0 \\ \bar{C} & 1 & 0 & 1 & 0 & 1 & 0 & 1 & 0 \\ \hline AB & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 \\ AC & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 1 \\ BC & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 1 \\ \hline A + B & 0 & 0 & 1 & 1 & 1 & 1 & 1 & 1 \\ A + C & 0 & 1 & 0 & 1 & 1 & 1 & 1 & 1 \\ B + C & 0 & 1 & 1 & 1 & 0 & 1 & 1 & 1 \\ \hline A\oplus B & 0 & 0 & 1 & 1 & 1 & 1 & 0 & 0 \\ A\oplus C & 0 & 1 & 0 & 1 & 1 & 0 & 1 & 0 \\ B\oplus C & 0 & 1 & 1 & 0 & 0 & 1 & 1 & 0 \\ \hline A(B+C) & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 \\ AB+AC & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 \\ \hline A(B\oplus C) & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 \\ (AB)\oplus(AC) & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 \\ \hline A+(BC) & 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 \\ (A+B)(A+C) & 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 \\ \hline A+(B\oplus C) & 0 & 1 & 1 & 0 & 1 & 1 & 1 & 1 \\ (A+B)\oplus(A+C) & 0 & 1 & 1 & 0 & 0 & 0 & 0 & 0 \\ \hline A\oplus(BC) & 0 & 0 & 0 & 1 & 1 & 1 & 1 & 0 \\ (A\oplus B)(A\oplus C) & 0 & 0 & 0 & 1 & 1 & 0 & 0 & 0 \\ \hline A\oplus(B+C) & 0 & 1 & 1 & 1 & 1 & 0 & 0 & 0 \\ (A\oplus B)+(A\oplus C) & 0 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\ \hline \end{array} $$
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
p = [[0] * 8 for _ in range(3)]
for i in range(8):
    for j in range(3):
        p[2 - j][i] = (i >> j) & 1

A, B, C = p


def S(A):
    return " & ".join(map(str, A))


def Not(A):
    return list(map(lambda x: x ^ 1, A))


def And(A, B):
    return list(map(lambda x: x[0] & x[1], zip(A, B)))


def Or(A, B):
    return list(map(lambda x: x[0] | x[1], zip(A, B)))


def Xor(A, B):
    return list(map(lambda x: x[0] ^ x[1], zip(A, B)))


s = f"""
$$
\\begin{{array}}{{|c|cccccccc|}}
\\hline
  & {S(range(8))} \\\\
\\hline
A & {S(A)} \\\\
B & {S(B)} \\\\
C & {S(C)} \\\\
\\hline
\\bar{{A}} & {S(Not(A))} \\\\
\\bar{{B}} & {S(Not(B))} \\\\
\\bar{{C}} & {S(Not(C))} \\\\
\\hline
AB & {S(And(A, B))} \\\\
AC & {S(And(A, C))} \\\\
BC & {S(And(B, C))} \\\\
\\hline
A + B & {S(Or(A, B))} \\\\
A + C & {S(Or(A, C))} \\\\
B + C & {S(Or(B, C))} \\\\
\\hline
A\\oplus B & {S(Xor(A, B))} \\\\
A\\oplus C & {S(Xor(A, C))} \\\\
B\\oplus C & {S(Xor(B, C))} \\\\
\\hline
A(B+C) & {S(And(A, Or(B, C)))} \\\\
AB+AC & {S(Or(And(A, B), And(A, C)))} \\\\
\\hline
A(B\\oplus C) & {S(And(A, Xor(B, C)))} \\\\
(AB)\\oplus(AC) & {S(Xor(And(A, B), And(A, C)))} \\\\
\\hline
A+(BC) & {S(Or(A, And(B, C)))} \\\\
(A+B)(A+C) & {S(And(Or(A, B), Or(A, C)))} \\\\
\\hline
A+(B\\oplus C) & {S(Or(A, Xor(B, C)))} \\\\
(A+B)\\oplus(A+C) & {S(Xor(Or(A, B), Or(A, C)))} \\\\
\\hline
A\\oplus(BC) & {S(Xor(A, And(B, C)))} \\\\
(A\\oplus B)(A\\oplus C) & {S(And(Xor(A, B), Xor(A, C)))} \\\\
\\hline
A\\oplus(B+C) & {S(Xor(A, Or(B, C)))} \\\\
(A\\oplus B)+(A\\oplus C) & {S(Or(Xor(A, B), Xor(B, C)))} \\\\
\\hline
\\end{{array}}
$$
"""

print(s)