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 的回答更加简洁准确;这更多是为了提供更广泛的概述,因为我知道有些人在看到过程时会学得更好。