25

这个声明的等价物是什么?

if(cond1 AND cond2 AND cond3 OR cond4 AND cond5 AND cond6)

是吗

if((cond1 AND cond2 AND cond3) OR (cond4 AND cond5 AND cond6))

或者

if(cond1 AND cond2 AND (cond3 OR cond4) AND cond5 AND cond6)

或者

if(((cond1 AND cond2 AND cond3) OR cond4) AND cond5 AND cond6)

等等...

这一直是我一直害怕接近的东西,我只是将括号中的条件括起来( )。如果我的心能安定下来就好了。

4

5 回答 5

55

记住这一点的一个好方法是用数学方法来思考它。

  • AND作为*(乘)
  • OR作为+(加法)
  • TRUE作为1
  • FALSE作为0

因此,将其视为简单的数学运算,您会得到:

  • 0 * 0 = 0
  • 1 * 0 = 0
  • 1 * 1 = 1
  • 0 + 0 = 0
  • 1 + 0 = 1
  • 1 + 1 = 1

唯一可能有点令人困惑的是1 + 1 = 1,但有点不能超越11但是,如果您将其视为任何非零数字,则这是有道理的。

因此,考虑到这一点,您可以应用以下逻辑:

if(cond1 AND cond2 AND cond3 OR cond4 AND cond5 AND cond6)

变成:

if(cond1 * cond2 * cond3 + cond4 * cond5 * cond6)

见:https ://en.wikipedia.org/wiki/Order_of_operations

于 2017-01-19T08:58:24.290 回答
18

在大多数语言AND中,首先评估,因此

if((cond1 AND cond2 AND cond3) OR (cond4 AND cond5 AND cond 6))

是正确的选择。

对于 C#,请参阅http://msdn.microsoft.com/en-us/library/aa691323%28v=vs.71%29.aspx

对于 C,请参阅http://en.cppreference.com/w/cpp/language/operator_precedence

对于 Java,请参阅http://bmanolov.free.fr/javaoperators.php

于 2013-05-29T04:47:37.130 回答
3

在正常的布尔连接词集合中(从逻辑的角度来看),and的优先级比 高or,所以A or B and C真的A or (B and C)维基百科按顺序列出它们。大多数编程语言都应该遵守这个约定,除非它们真的很奇怪。

也就是说,对于您的特定语言或环境,应该可以编造一个非常小的测试来满足自己,这是一种或另一种方式:)

于 2013-05-29T04:46:09.413 回答
0

大多数语言首先评估 AND。

于 2013-05-29T04:43:29.247 回答
0

这完全取决于您要询问的语言或环境,不幸的是您没有指定。

AND可能比 具有更高的优先级OR,或者可能相反,或者可能相等。

如果您的语言是由虐待狂设计的,则可以从左到右、从右到左或从中间向外交替方向评估它:-)

AND具有比它们更高的优先级OR并且它们都是从左到右的关联是很常见的。

在这种情况下

cond1 AND cond2 AND cond3 OR cond4 AND cond5 AND cond 6

相当于:

((cond1 AND cond2) AND cond3) OR ((cond4 AND cond5) AND cond 6)
于 2013-05-29T04:44:05.023 回答