Операторы отношения применимы для вычисления соотношений между операндами. Логические операторы, используя правила формальной логики, также возвращают соотношения между операндами. Поскольку операторы отношения и логические операторы часто применяются вместе, то мы рассмотрим их также вместе.
Ключевой концепцией операторов отношения и логических операторов является понятие истины и лжи. В С истине соответствует любое значение, кроме 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);
