web-dev-qa-db-ja.com

AND OR演算の順序

このステートメントに相当するものは何ですか?

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)

電気ショック療法...

これは私がいつも近づくのが怖いもので、括弧で囲んで条件を囲んでいます( )。私の心が落ち着くことができれば素晴らしいと思います。

14
Isaac

これを覚えておく良い方法は、数学的に考えることです。

  • AND as _*_(乗算)
  • OR as _+_(追加)
  • TRUE as _1_
  • FALSE as _0_

したがって、これを単純な数学と考えると、次のようになります。

  • _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

27
Deantwo

ほとんどの言語では、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 を参照してください。

11
Veer

(論理的な観点から)ブール接続の通常のセットでは、andorよりも優先順位が高いため、_A or B and C_は実際にはA or (B and C)です。 ウィキペディア それらを順番にリストします。ほとんどのプログラミング言語は、本当に奇妙でない限り、この規則に従う必要があります。

そうは言っても、あなたの特定の言語や環境では、それがいずれかの方法であると自分自身を満足させるために非常に小さなテストを作成することが可能であるはずです:)

2
Gian

ほとんどの言語はANDを最初に評価します。

0
Monstieur

それはあなたが尋ねている言語や環境に完全に依存しますが、残念ながらあなたはそれを指定していません。

ANDORよりも優先される場合があります。または、その逆である場合もあれば、等しい場合もあります。

あなたの言語がサディストによって設計されている場合、それは左から右、右から左、または中央から外側に交互の方向に評価されるかもしれません:-)

ANDORよりも優先順位が高く、両方が左から右に結合することは非常に一般的です。

その場合

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

と同等になります:

((cond1 AND cond2) AND cond3) OR ((cond4 AND cond5) AND cond 6)
0
paxdiablo