写在前面:
逻辑之于程序员,好比半导体芯片之于现代工业。本节内容是我们都学过的“集合论”和“数字电路”中工具串联:文氏图、真值表、德摩根律和卡诺图。
作者给出逻辑要求:不漏不重。(不漏即完整, 不重即排他),逻辑根本上来说就是对“不漏不重”的组合表达。
本篇笔记针对如何利用上述逻辑和集合论工具解决复杂逻辑命题。复杂逻辑命题就是一个程序里要写几十个或者上百个if语句组合的情况。
1. 复杂命题表示工具: 文氏图和真值表
- A ∩ B A \cap B A∩B: A && B, 逻辑与
- A ∪ B A\cup B A∪B: A || B, 逻辑或
- A ˉ \bar A Aˉ: !A, 逻辑非
- A ⊕ B A\oplus B A⊕B: A^B, 异或(这里的^是按位异或)
- A ⊙ B A\odot B A⊙B:同或
- A ⇒ B A\Rightarrow B A⇒B: A蕴含B(若A则B),这是两个命题的复合。
1.1 简单的与或非的文氏图
表示如图1:
![](https://i-blog.csdnimg.cn/blog_migrate/ae6cd13a7a8038beb1e100e8c7135ce2.png)
图1 与或非文氏图
1.2 异或、同或
直接画出异或、同或的文氏图会有点难度。一般可先写出真值表如图2, 再由真值表推出相应的文氏图,如图3。
![](https://i-blog.csdnimg.cn/blog_migrate/5cf1aee801abb538381978c9b69c1b9e.png)
图2 异或和同或的真值表
![](https://i-blog.csdnimg.cn/blog_migrate/bc40082b4a7bad9f3719770b536948fc.png)
图3 异或 和同或的文氏图
可见 ( A ⊙ B ) ‾ = = A ⊕ B \overline{(A\odot B)} == A\oplus B (