2015-11-16 3 views
2

Если у меня есть, если заявлениеКаков порядок операций для соединения логических выражений в «если» заявление

if (var1 || var2 && var3) 
{ 
    //anything 
} 

Каков порядок он оценивает эти переменные?

Я думаю, на самом деле, что я хотел бы знать, если это, если заявление будет эквивалентно

if ((var1 || var2) && var3){} 
//or 
if (var1 || (var2 && var3)){} 

и делает заказ дела в первой инстанции

Я понимаю, я мог бы прояснить это с кронштейнами и он будет оценивать их в порядке, который я ожидаю. Но мне было интересно, по умолчанию они просматриваются, когда нет скобок.

+2

Проверьте [приоритет оператора и ассоциативность] (https://msdn.microsoft.com/en-us/library/aa691323 (v = vs.71) .aspx) – juharr

+0

Спасибо за ссылку. Трудно найти из-за того, сколько информации на || а также &&. – Scriven

+0

Вы можете думать об этом с точки зрения арифметики - 'или' is '+'; 'и' '' '. В этом случае 'var1 || var2 && var3' отображает 'var1 + var2 * var3', который является' var1 + (var2 + var3) '. Возвращаясь к булевой алгебре, у вас есть 'var1 || (var2 && var3) '. Надеюсь, это имеет смысл. –

ответ

4

От docs, && имеет преимущество перед ||. После того, как приоритет установлен, он течет слева направо. Итак, в вашем примере это заканчивается, если (var1 || (var2 && var3)){}.

+0

Спасибо за помощь. Я думаю, что это правильный ответ, но все ответы, которые пришли и ушли, действительно говорят о том, чтобы быть конкретными, потому что это укусит вас в прикладе. – Scriven

+1

да не шучу. Я думаю, что это одна из тех вещей, о которых вам никогда не придется беспокоиться, пока вы этого не сделаете. – DrewJordan