Порядок приоритета бинарных операторов C++

StackOverflow https://stackoverflow.com/questions/113992

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

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

Редактировать:Принятый ответ и последующие действия

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

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

Это было полезно?

Решение

От здесь:

a || (b && c)

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

Другие советы

[http://www.cppreference.com/wiki/operator_precedence] (Найдено путем поиска в Google «Приоритет операторов C++»)

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

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

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

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

Хорошее мнемоническое правило — помнить, что «И» похоже на умножение, а «ИЛИ» — на сложение.Если заменить AND на * и 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)

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top