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