И ИЛИ порядок операций

Что эквивалентно этому утверждению?

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 ответов

Решение

В большинстве языков 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 как + (Дополнение)
  • 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, но немного не может идти выше 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

В обычном наборе логических связок (с логической точки зрения) and имеет более высокий приоритет, чем or, так A or B and C действительно A or (B and C), Википедия перечисляет их по порядку. Большинство языков программирования должны подчиняться этому соглашению, если они действительно не странны.

Тем не менее, для вашего конкретного языка или среды должна быть возможность создать очень маленький тест, чтобы убедиться, что это так или иначе:)

Большинство языков оценивают И в первую очередь.

Это полностью зависит от языка или среды, о которой вы спрашиваете, чего, к сожалению, вы не указали.

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)
Другие вопросы по тегам