简化逻辑陈述

时间:2015-12-01 05:56:55

标签: if-statement boolean-operations

我有这个:

<clients>
    <client host="client-master" use_controller_vm="true" maxusers="10000"/>
    <client host="client-slave-11" port="8123" weight="3" maxusers="40000" cpu="1">
        <ip value="10.0.0.101"></ip>
    </client>
    <client host="client-slave-2" port="8123" weight="3" maxusers="40000" cpu="1">
        <ip value="10.0.0.102"></ip>
    </client>
</clients>

我想否定 if-statement:

这应该有效:

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

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

2 个答案:

答案 0 :(得分:6)

欢迎来到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) 

答案 1 :(得分:4)

如果你把它分解成真值表......

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之外,您可以看到结果为真,而不必知道/记住任何布尔代数规则。 &#34;除了&#34;只是&#34;不是&#34;所以... !(A and !B) ...

然而,如果写!A or (A and B)更好地符合现实世界中的问题,那么您尝试编码会让它保持原样,除非它对性能至关重要......