Логические операции и операции отношения


Логические операции и операции сравнения в языке Си оперируют понятиями "истина" и "ложь". Причем "истина" соответствует значению 1, а "ложь" - значению 0. Оба этих вида операций применяются к арифметическим операндам, то есть числам.

Операции отношения
Операции отношения позволяют сравнить два значения и возвращают 1 (если выражение истинно) или 0 (если выражение ложно). В языке Си есть следующие операции отношения:

==

Операция "равно". Возвращает 1, если оба операнда равны, и 0, если они не равны:

1
2
3
int a = 10;
int b = 4;
int c = a == b; // 0
>

Операция "больше чем". Возвращает 1, если первый операнд больше второго, и 0, если первый операнд меньше или равен второму:

1
2
3
int a = 10;
int b = 4;
int c = a > b; // 1
<

Операция "меньше чем". Возвращает 1, если первый операнд меньше второго, и 0, если первый операнд больше или равен второму:

1
int c = 10 < 4; // 0
<=

Операция "меньше или равно". Возвращает 1, если первый операнд меньше или равен второму, и 0, если первый операнд больше второго:

1
int c = 10 <= 4; // 0
>=

Операция "больше или равно". Возвращает 1, если первый операнд больше или равен второму, и 0, если первый операнд меньше второго:

1
int c = 10 >= 4; // 1
!=

Операция "не равно". Возвращает 1, если первый операнд не равен второму, и 0, если оба операнда равны:

1
2
int c = 10 != 4; // 1
int d = 4 != 4; // 0
Как правило, операции отношения применяются в условных конструкциях типа if...else, которые мы далее рассмотрим.

Логические операции
Логические операции, как правило, применяются к отношениям и объединяют несколько операций отношения. К логическим операциям относят следующие:

! (операция отрицания)

Если операнд равен 0, то возвращает 1, иначе возвращает 0.

1
2
int c = !2; // 0
int d = !0; // 1
&& (конъюнкция, логическое умножение)

Возвращает 1, если оба операнда не равны 0. Возвращает 0, если хотя бы один операнд равен 0.

1
2
int c = -2 && 5; // 1
int d = 0 && 7; // 0
|| (дизъюнкция, логическое сложение)

Возвращает 1, если хотя бы один операнд не равен 0. Возвращает 0, если оба операнда равны 0.

1
2
3
int c = -2 || 5; // 1
int d = 0 || 7; // 1
int e = 0 || 0; // 0
Используем одновременно несколько логических операций и операций сравнения:

1
2
3
4
5
6
7
8
9
int a = -2 > 5; // 0
int b = 0 < 7; // 1
int c = 0 == 0; // 1
int d = a && b || c; // 1

printf("a = %d \n", a);
printf("b = %d \n", b);
printf("c = %d \n", c);
printf("d = %d \n", d);
Операции сравнения имеют больший приоритет, чем логические операции, поэтому мы могли бы напрямую подставить операции сравнения:

1
int d = -2 > 5 && 0 < 7 || 0 == 0; // 1