2008-09-22 2 views
4

В каком порядке тестируются следующие параметры (на C++)?C++ Бинарные операторы порядок приоритета

if (a || b && c) 
{ 
} 

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

Edit: Принимается ответ & РАЗВЕЙТЕ

Эта ссылка содержит больше информации, но это не совсем понятно, что это значит. Кажется || и & & имеют одинаковый приоритет, и в этом случае они оцениваются слева направо.

http://msdn.microsoft.com/en-us/library/126fe14k.aspx

ответ

4

От here:

a || (b && c) 

Это приоритет по умолчанию.

+1

старшинство C++ 's является не настраивается, поэтому «default» является избыточным. – 2008-09-22 09:42:55

+0

Я имел в виду «по умолчанию», как в «без круглых скобок» – tzot 2008-09-22 09:49:46

-2

Я не уверен, но вам должно быть легко узнать.

Просто создать небольшую программу, с утверждением, что печатает значение истинности: (истина || ложь & & верно)

Если результат верен, то || имеет более высокий приоритет, чем & &, если это фалаза, это наоборот.

7

[http://www.cppreference.com/wiki/operator_precedence] (Обнаружен "прибегая к помощи C++ оператор приоритет")

Эта страница говорит нам, что & &, в группе 13, имеет более высокий приоритет, чем || в группе 14, поэтому выражение эквивалентно || (b & & c).

К сожалению, статья Википедии [http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence] не согласна с этим, но поскольку у меня есть стандарт C89 на моем столе, и это согласуется с первым сайтом, я собираюсь пересмотреть статью в Википедии.

0

Чтобы ответить на вопрос: очевидно, что таблица в MSDN повреждена, возможно, кто-то не может сделать достойную таблицу HTML (или использовать инструмент Microsoft для ее создания!).
Я полагаю, что это должно больше походить на таблицу Википедии, на которую ссылается Родриго, где у нас есть четкие подразделы.
Но ясно, что принятый ответ прав, как-то у нас тот же приоритет с & & и || чем с * и +, например.
Фрагмент, который вы дали, ясен и недвусмыслен для меня, но я полагаю, что добавление круглых скобок не повредит.

2

& & (boolean AND) имеет более высокий приоритет, чем || (логическое ИЛИ). Поэтому следующий идентичны:

a || b && c 
a || (b && c) 

Хорошее мнемоническое правило стоит помнить, что и, как умножение и OR, как дополнение.Если мы заменим и с * и OR с +, мы получаем более привычную эквивалент:

a + b * c 
a + (b * c) 

На самом деле, в булевой логике, И и ИЛИ, действуют подобно арифметические операторы:

 
a b a AND b a * b a OR b a + b 
--------------------------------------- 
0 0  0  0  0  0 
0 1  0  0  1  1 
1 0  0  0  1  1 
1 1  1  1  1  1 (2 really, but we pretend it's 1) 
Смежные вопросы