【问题标题】:Resolving negation of multiple OR statements in a conditional解决条件中多个 OR 语句的否定
【发布时间】:2016-03-21 01:41:12
【问题描述】:

我很难理解多个 OR 语句的否定。

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

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

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

很明显,没有回显/输出,因为所有条件都匹配。此外,否定有点容易理解。换句话说,如果我使用1 为真,0 为假,则条件只有在解析为111 时才能匹配,因此如果不是111,则条件为真即如果我有101100001 等,则否定匹配。

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

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

没有否定,如果[使用前面介绍的数字符号]条件解析为除000之外的任何内容,它将解析为true,即如果否定不是,则必须至少有一个匹配项才能解析为true展示。

那么否定存在到底会发生什么?

【问题讨论】:

  • 我不确定我是否明白了你的问题,但除了 000 之外,你得到 TRUE 的否定。
  • en.wikipedia.org/wiki/De_Morgan's_lawsnot(A || B) ~ not(A) && not(B)。还有not(A && B) ~ not(A) || not(B)
  • @Rizier123 我认为除了 000 之外的任何东西都是 TRUE 没有否定,即只有至少有一个匹配它才会是 TRUE 没有否定?!

标签: php conditional logical-operators


【解决方案1】:

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

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

条件中的每个比较都会计算为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)) 

【讨论】:

  • 感谢您的澄清。编辑问题以使条件之一为假。所以我猜这将是if(true || true || false),即if(true),因此if(!true) 是否定的。那么这是否意味着对于 OR 条件,否定在逻辑上等同于没有否定的 AND 条件?
  • 在基本布尔代数中,这是 AND 和 OR 之间的等价关系:A and B = !( !A or !B),有人在您的 OP 中对此发表了评论
  • 非常感谢。我做了一个小图来解决所有问题。干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
  • 2016-07-26
  • 2015-03-22
  • 1970-01-01
相关资源
最近更新 更多