Логические операции и операции отношения
Логические операции и операции сравнения в языке Си оперируют понятиями "истина" и "ложь". Причем "истина" соответствует значению 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