このステートメントに相当するものは何ですか?
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)
電気ショック療法...
これは私がいつも近づくのが怖いもので、括弧で囲んで条件を囲んでいます( )
。私の心が落ち着くことができれば素晴らしいと思います。
これを覚えておく良い方法は、数学的に考えることです。
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)
ほとんどの言語では、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 を参照してください。
(論理的な観点から)ブール接続の通常のセットでは、and
はor
よりも優先順位が高いため、_A or B and C
_は実際にはA or (B and C)
です。 ウィキペディア それらを順番にリストします。ほとんどのプログラミング言語は、本当に奇妙でない限り、この規則に従う必要があります。
そうは言っても、あなたの特定の言語や環境では、それがいずれかの方法であると自分自身を満足させるために非常に小さなテストを作成することが可能であるはずです:)
ほとんどの言語はANDを最初に評価します。
それはあなたが尋ねている言語や環境に完全に依存しますが、残念ながらあなたはそれを指定していません。
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)