IF 语句中逻辑条件的组合
Combining of logical conditions in IF statement
我只注意到下面的 if 条件:
//1
if ((i >= 0) != (j >= 0))
return false;
只是一个简短的方法:
//2
if((i>=0 && j < 0) || (i < 0 && j >=0))
return false;
从 1. 到 2. 需要一些时间来弄清楚,但是我们如何推导出从 2. 到 1. 的逻辑?
如果你有任何两个布尔语句 A 和 B 那么 A != B
意味着它们是不同的。 IE。要么A为真B为假,要么A为假B为真。反之亦然,如果 A 为真 B 为假,或者 A 为假 B 为真,则 A 不等于 B。
换句话说(A != B) = ((A && !B) || (!A && B))
。因此,语句1和2是一样的
如果觉得我的论证不严谨,可以用truth tables进行严密的数学证明:
A
B
A!=B
(A && !B)
(!A && B)
(A && !B) ||
(!A && B))
true
true
false
false
false
false
true
false
true
true
false
true
false
true
true
false
true
true
false
false
false
false
false
false
如果我们调用 (i >= 0)
像 A
和 (j >= 0)
像 B
这样的东西,那么 (i < 0)
就是 Not A
(通常显示为 !A
)和 (j < 0)
将是 Not B
或 !B
意思是这个块:
if((i>=0 && j < 0) || (i < 0 && j >=0))
return false;
可以表示为:
if ((A && !B) || (!A && B))
return false;
else // you haven't specified this part but it's implied
return true;
现在,如果我们将其处理为:
How do we get to the true value?
然后你意识到它与:
if ((A && B) || (!A && !B))
return true;
else
return false;
然后我们可以调用 (A && B)
类似 C
的东西;所以它变成:
if (C || !C)
return true;
else
return false;
所以,再向外展开,我们可以得到:
if (A && B)
return true;
else if (!(A && B))
return true;
else
return false;
所以,那是:
if ((i >= 0) && (j >= 0))
return true;
else if (!( (i >= 0) && (j >= 0) ) )
return true;
else
return false;
可以计算为:
if (True && True)
return true;
else if (False && False)
return true;
else
return false;
表明它很简单:
if ( (i >= 0) == (j >= 0) )
return true;
else // if ( (i >= 0) != (j >= 0) )
return false;
所以,我们已经绕过房子,但我们已经从陈述 2 到陈述 1。
注意:从纯逻辑的角度来看,Adam 的回答更加简洁准确;这更多是为了提供更广泛的概述,因为我知道有些人在看到过程时会学得更好。
我只注意到下面的 if 条件:
//1
if ((i >= 0) != (j >= 0))
return false;
只是一个简短的方法:
//2
if((i>=0 && j < 0) || (i < 0 && j >=0))
return false;
从 1. 到 2. 需要一些时间来弄清楚,但是我们如何推导出从 2. 到 1. 的逻辑?
如果你有任何两个布尔语句 A 和 B 那么 A != B
意味着它们是不同的。 IE。要么A为真B为假,要么A为假B为真。反之亦然,如果 A 为真 B 为假,或者 A 为假 B 为真,则 A 不等于 B。
换句话说(A != B) = ((A && !B) || (!A && B))
。因此,语句1和2是一样的
如果觉得我的论证不严谨,可以用truth tables进行严密的数学证明:
A | B | A!=B | (A && !B) | (!A && B) | (A && !B) || (!A && B)) |
---|---|---|---|---|---|
true | true | false | false | false | false |
true | false | true | true | false | true |
false | true | true | false | true | true |
false | false | false | false | false | false |
如果我们调用 (i >= 0)
像 A
和 (j >= 0)
像 B
这样的东西,那么 (i < 0)
就是 Not A
(通常显示为 !A
)和 (j < 0)
将是 Not B
或 !B
意思是这个块:
if((i>=0 && j < 0) || (i < 0 && j >=0))
return false;
可以表示为:
if ((A && !B) || (!A && B))
return false;
else // you haven't specified this part but it's implied
return true;
现在,如果我们将其处理为:
How do we get to the true value?
然后你意识到它与:
if ((A && B) || (!A && !B))
return true;
else
return false;
然后我们可以调用 (A && B)
类似 C
的东西;所以它变成:
if (C || !C)
return true;
else
return false;
所以,再向外展开,我们可以得到:
if (A && B)
return true;
else if (!(A && B))
return true;
else
return false;
所以,那是:
if ((i >= 0) && (j >= 0))
return true;
else if (!( (i >= 0) && (j >= 0) ) )
return true;
else
return false;
可以计算为:
if (True && True)
return true;
else if (False && False)
return true;
else
return false;
表明它很简单:
if ( (i >= 0) == (j >= 0) )
return true;
else // if ( (i >= 0) != (j >= 0) )
return false;
所以,我们已经绕过房子,但我们已经从陈述 2 到陈述 1。
注意:从纯逻辑的角度来看,Adam 的回答更加简洁准确;这更多是为了提供更广泛的概述,因为我知道有些人在看到过程时会学得更好。