Условные операции позволяют проверить истинность некоторого условия и оперируют понятиями "истина"/"верно" и "ложь"/"неверно". Причем "истина" (условие верно) соответствует значению 1, а "ложь" (условие не верно) - значению 0. К условным операциям относят операции сравнения и логические операции. Оба этих вида операций применяются к арифметическим операндам, то есть числам. .
Операции сравнения (еще называют операциями отношения) позволяют сравнить два значения и возвращают 1, если выражение истинно, и 0, если выражение ложно. В языке Си есть следующие операции сравнения:
==
Операция "равно". Возвращает 1, если оба операнда равны, и 0, если они не равны:
#include <stdio.h> int main(void) { int a = 10; int b = 4; int c = a == b; // 0 - числа НЕ равны printf("c = %d \n", c); // c = 0 int num = 5; int result = num == 2 + 3; // 1 - числа равны printf("result = %d \n", result); // result = 1 return 0; }
В первом случае переменная c
хранит результат выражения a == b
. Так как a и b не равны, то это выражение возвратит 0. Поэтому переменная c будет равна 0.
Во втором случае переменная result
хранит результат выражения num == 2 + 3;
, где в качестве второго операнда выступает результат операции
2 + 3
. Так как переменная num
равна 5, то это выражение возвратит 1. Поэтому переменная result
будет равна 1.
!=
Операция "не равно". Возвращает 1, если первый операнд не равен второму, и 0, если оба операнда равны:
int c = 10 != 4; // 1 int d = 4 != 4; // 0
>
Операция "больше чем". Возвращает 1, если первый операнд больше второго, и 0, если первый операнд меньше или равен второму:
int a = 10; int b = 4; int c = a > b; // 1
<
Операция "меньше чем". Возвращает 1, если первый операнд меньше второго, и 0, если первый операнд больше или равен второму:
int c = 10 < 4; // 0
<=
Операция "меньше или равно". Возвращает 1, если первый операнд меньше или равен второму, и 0, если первый операнд больше второго:
int c = 10 <= 4; // 0
>=
Операция "больше или равно". Возвращает 1, если первый операнд больше или равен второму, и 0, если первый операнд меньше второго:
int c = 10 >= 4; // 1
Как правило, операции отношения применяются в условных конструкциях типа if...else, которые мы далее рассмотрим.
Логические операции, как правило, применяются к отношениям и объединяют несколько операций отношения. К логическим операциям относят следующие:
! (операция отрицания)
Если операнд равен 0, то возвращает 1, иначе возвращает 0.
int c = !2; // 0 int d = !0; // 1
&& (конъюнкция, логическое умножение)
Возвращает 1, если оба операнда не равны 0. Возвращает 0, если хотя бы один операнд равен 0.
int c = -2 && 5; // 1 int d = 0 && 7; // 0
|| (дизъюнкция, логическое сложение)
Возвращает 1, если хотя бы один операнд не равен 0. Возвращает 0, если оба операнда равны 0.
int c = -2 || 5; // 1 int d = 0 || 7; // 1 int e = 0 || 0; // 0
Используем одновременно несколько логических операций и операций сравнения:
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);
Операции сравнения имеют больший приоритет, чем логические операции, поэтому мы могли бы напрямую подставить операции сравнения:
int d = -2 > 5 && 0 < 7 || 0 == 0; // 1