Программирование на C и C++

Онлайн справочник программиста на C и C++

Операторы отношения и логические операторы

Операторы отношения применимы для вычисления соотношений между операндами. Логические операторы, используя правила формальной логики, также возвращают соотношения между операндами. Поскольку операторы отношения и логические операторы часто применяются вместе, то мы рассмотрим их также вместе.

Ключевой концепцией операторов отношения и логических операторов является понятие истины и лжи. В С истине соответствует любое значение, кроме 0, а лжи — 0. Выражение, использующее операторы отношения или логические операторы, возвращают 0 для лжи и 1 для истины.

Таблица: Операторы отношения и логические операторы
Операторы отношения
Оператор Действие
> Больше чем
>= Больше чем или равно
< Меньше чем
<= Меньше чем или равно
== Равно
!= Не равно
Логические операторы
&& И
|| ИЛИ
! НЕ

Таблица показывает операторы отношения и логические операторы. Таблица истинности для логических операторов образована с использованием на входах 1 и 0:

p q p&&q p||q !p
0 0 0 0 1
0 1 0 1 1
1 1 1 1 0
1 0 0 1 0

Как операторы отношения, так и логические операторы имеют более низкий приоритет по сравнению с арифметическими операторами. Это означает, что выражение типа 10 > 1+12 вычисляется как 10 > (1 + 12). Результатом, естественно, будет ложь.

В выражении может объединяться несколько операторов, как показано ниже:

10 > 5 && 1(10 < 9) II 3 <= 4

в результате чего получаем истину.

Ниже показаны приоритеты выполнения операторов отношения и логических операторов:

высший ! > >= < <=  &&
низший ||

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

! 1 && 0

даст в результате 0, поскольку ! вычисляется первым, а затем вычисляется &&. Если в этом выражении поставить скобки следующим образом:

! (1 && 0)

то получится истина.

Надо помнить, что все выражения с операторами отношения и логическими операторами дают в результате 0 или 1. Поэтому следующий фрагмент программы не только корректен, но и печатает число 1:


int x;
x = 100;
printf("%d", x > 1);