这可能是也可能不是一个愚蠢的问题,但为什么以下2个if语句的结果不同
我们说吧 k = "z";
if (!k=="x" || !k=="y")
{
//do something
}
2.
if (!(k=="x" || k=="y"))
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
在我的脑海里,这两个陈述都应该点击// Do Something ....只有底部才会被击中.顺便说一句是预期的结果.
再次抱歉,但是我不能把我无知的思想包裹起来.
Eri*_*ert 12
你的问题是"为什么(NOT X) OR (NOT Y)与众不同NOT(X OR Y)?"
NOT(X OR Y) 如果X或Y为真,则为假,否则为真.
(NOT X) OR (NOT Y) 如果X和Y都为真,则为假,否则为真.
"X或Y是真的"和"X和Y都是真的"是不同的.
当你感到困惑时,这是一个很好的技巧:画一个真值表:
X Y NOT X NOT Y X OR Y (NOT X) OR (NOT Y) NOT(X OR Y)
T T F F T F F
T F F T T T F
F T T F T T F
F F T T F T T
Run Code Online (Sandbox Code Playgroud)
现在很清楚它们是不同的吗?
如果你现在绘制真值表,NOT(X AND Y)你会看到它是相同的(NOT X) OR (NOT Y),所以这两个表达式是等价的.
如果你画出真值表,(NOT X) AND (NOT Y)你会发现它和它一样NOT(X OR Y).同样,这两个表达式是等价的.
确保清楚.
现在,你有一个更大的问题:
k != "x" || k != "y"
Run Code Online (Sandbox Code Playgroud)
这个谓词不可能是真的.假设k是"x".然后它显然不是"y",所以谓词是真的.假设k是"y".那么它显然不是"x",所以谓词是真的.假设k是任何其他值.那么它显然既不是"x"也不是"y",所以谓词是正确的.因此无论如何,这都是真实的. (NOT X) OR (NOT Y)也不会意味着"x和y都不".
这是因为您错过了解逻辑表达式评估.有关进一步阅读的信息,请参阅DeMorgans Laws的维基百科页面,但您需要的是这一点......
!(A || B) 是相同的 !A && !B
这实际上并不是一个愚蠢的问题......这是一个非常简单的逻辑错误,也很常见.
为了完整性,我还应该添加以下内容......
!A || !B 是相同的 !(A && B)
| 归档时间: |
|
| 查看次数: |
321 次 |
| 最近记录: |