Оператор приоритет одинаков для ==
и !=
, так как они оба принадлежат одним и тем же операторам группового равенства. Чтобы отделить операторы с одинаковым приоритетом, мы используем операторную ассоциативность этой группы, в данном случае слева направо. Это означает, что 2 == 2 != 3
гарантированно будет проанализировано как (2 == 2) != 3
. Итак, мы получаем:
Примечательно, что и ==
, и !=
имеют более высокий приоритет, чем =
, поэтому скобки в вашем выражении = (2 == 2 != 3)
не нужны (но рекомендуется использовать их, если вы не уверены в приоритетах).
Относительно порядка выполнения / оценки , это еще один термин, который не следует путать с приоритетом оператора. Порядок вычисления операндов ==
и !=
в вашем выражении не указан, то есть мы не можем знать, какой из них будет выполнен первым.
В этом случае это не имеет значения, но если бы у нас было это check = a() == b() != c();
, оно могло бы иметь. Здесь мы не можем знать, какие из 3 функций выполняются первыми. Мы только знаем, что приоритет оператора говорит, что результат a
должен сравниваться с результатом b
перед результатом c
, но функция c
все еще может выполняться в первую очередь.