解决条件中多个 OR 语句的否定

Resolving negation of multiple OR statements in a conditional

我有点难以理解多个 OR 语句的否定。

在 AND 的情况下,假设我有以下内容:

$a = 'john';
$b = 'mark';
$c = 'luke';

if(!($a == 'john' && $b == 'mark' && $c == 'luke'))
{
    echo "Not All Apostles";
}

显然没有echo/output,因为所有条件都符合。此外,否定有点容易理解。换句话说,如果我使用 1 表示 true,0 表示 false,条件只能在解析为 111 时匹配,因此对于否定,条件为真,如果它不是 111 即否定匹配如果我有 101100001

那么当我有以下情况时会发生什么:

if(!($a == 'john' || $b == 'david' || $c == 'luke'))
{
    echo "???";
}

如果没有否定,如果[使用前面介绍的数字符号]条件解析为 000 以外的任何内容,它将解析为真,即如果条件解析为真,则必须至少有一个匹配项否定不存在。

那么现在的否定到底发生了什么?

我认为您对按位与布尔比较感到困惑:

您使用的是布尔比较 &&|| 而不是按位运算符 &|

你条件中的每个比较都计算为 truefalse:

所以:

if(!($a == 'john' && $b == 'mark' && $c == 'luke'))
{
   echo "Not All Apostles";
}

实际上是:

if(!(true && true && true))
{
   echo "Not All Apostles";
} 

也就是if(false)

你的第二个例子:

if(!(true || true || true))
{ 
     echo "???";
  }

变成

if(!($a == 'john' || $b == 'mark' || $c == 'luke'))
{ 
     echo "???";
  }

这也是

if(!(true))