简化逻辑语句

Simplify logic statement

我有这个:

if(!A or (A and B))   //pseudocode

我想否定那个if语句:

这应该有效:

if(!(!A or (A and B)))  //pseudocode

但我相信有一种方法可以简化它,而它现在正在逃避我。

欢迎来到 de-Morgan 的布尔代数世界,然后进行简单分布:

if(!(!A or (A and B)) 
=> if(!(!A) and !(A and B))
=> if(A and (!A or !B))
=> if((A and !A) or (A and !B))
=> if(A and !B) 

如果你把它分解成一个真理table...

A B  !A  (A and B)  A! or (A and B)
0 0  1   0          1
0 1  1   0          1
1 0  0   0          0
1 1  0   1          1

您可以看到除 A and !B 之外的所有情况下结果都为真,而无需 know/remember 任何布尔代数规则。 "Except" 只是 "not" 所以... !(A and !B)...

但是,如果编写 !A or (A and B) 更符合您尝试编码的现实问题,就这样吧,除非它对性能非常关键...