Операторы, имеющие одинаковый приоритет, выполняются компилятором слева направо. Разумеется, для изменения порядка выполнения арифметических операций могут быть использованы скобки (круглые). Скобки рассматриваются С++ точно так же, как и любым другими компьютерными языками: они переводят операцию или группу операций на более высокий уровень приоритета.
В выражениях оператор отношения и логический оператор слово oтношение обозначает взаимоотношение двух величин, т. е. результат их сравнения, а слово логический обозначает способ, которым объединяются истинное и ложное значения. Поскольку операторы отношения образуют истинный или ложный результат, они часто используются совместно с логическими операторами. Именно по этой причине они обсуждаются здесь вместе.
Операторы отношения и логические перечислены в табл. 2-4. Обратите внимание на отношения равенства и неравенства: в С++ не равно обозначается знаками !=, а равно - двойным знаком равенства, ==. В С++ результат операции отношения или логической образует результат типа bool. Другими словами, результат операции отношения или логической всегда равен либо true, либо false.
Таблица 2-4. Операторы отношения и логические в С++
Операторы отношения
Оператор
Значение
>
Больше чем
>=
Больше чем или равно
<
Меньше чем
<=
Меньше чем или равно
==
Равно
!=
Не равно
Операторы логические
Оператор
Значение
&&
И
!!
ИЛИ
!
НЕ
Для старых компиляторов результат операции отношения и логической может быть целым числом, принимающим значение 0 или 1. Это различие носит в основном академический характер, потому что С++, как это уже отмечалось, автоматически преобразует true в 1, a false в 0 и наоборот.
Операнды, участвующие в операции отношения, могут принадлежать почти любому типу; необходимо только, чтобы их сравнение имело смысл. Операнды логической операции должны образовывать истинный или ложный результат. Поскольку ненулевое значение истинно, а нулевое ложно, это означает, что логические операторы допустимо использовать с любым выражением, дающим нулевой или ненулевой результат. Фактически можно использовать любое выражение, кроме тех, результат которых есть void.
Логические операторы используются для поддержки базовых логических операций И (AND), ИЛИ (OR) и НЕ (NOT), согласно следующей таблице истинности:
р
q
p И q
p ИЛИ q
НЕ р
Ложь
Ложь
Ложь
Ложь
Истина
Ложь
Истина
Ложь
Истина
Истина
Истина
Истина
Истина
Истина
Ложь
Истина
Ложь
Ложь
Истина
Ложь
Оба типа операторов, и логические, и отношения, имеют более низкий приоритет, чем арифметические операторы. Это означает, что выражение вроде 10 > 1 + 12 дает тот же результат, что и вариант 10 > (1 + 12). Результат, разумеется, ложен.
С помошью логических операторов можно объединять любое количество операторов отношения. Например, в этом выражении объединены три оператора отношения:
var > 15 || !(10< count) && 3 <= item
В приведенной ниже таблице показаны относительные приоритеты операторов отношения и логических: