AND OR操作顺序

时间:2013-05-29 04:40:58

标签: operator-precedence

这句话的等价物是什么?

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)

等...

这一直是我一直害怕接近的事情,我只围绕括号( )中的条件。如果我的思想得以解决,那就太好了。

5 个答案:

答案 0 :(得分:22)

记住这一点的一个好方法是以数学方式考虑它。

  • AND*(相乘)
  • OR+(另外)
  • TRUE1
  • FALSE0

所以把它想象成简单的数学就可以了:

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

只有可能有点混乱的事情是1 + 1 = 1,但有点不能超过1

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

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

答案 1 :(得分:10)

在大多数语言中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

答案 2 :(得分:2)

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

那就是说,对于你的特定语言或环境,应该可以编写一个非常小的测试,以满足自己的方式或其他方式:)

答案 3 :(得分:0)

大多数语言首先评估和。

答案 4 :(得分: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)