Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Операторы сравнения
Операторы сравнения используются в логических выражениях. Перечислим операторы сравнения, доступные в языке C++:
==
— равно;!=
— не равно;<
— меньше;>
— больше;<=
— меньше или равно;>=
— больше или равно.
Логические выражения возвращают только два значения true
(Истина
, соответствует числу 1
) или false
(Ложь
, соответствует числу 0
). Пример вывода значения логического выражения:
std::cout << (10 == 10) << std::endl; // 1 (true)
std::cout << (10 == 5) << std::endl; // 0 (false)
std::cout << (10 != 5) << std::endl; // 1 (true)
std::cout << (10 < 5) << std::endl; // 0 (false)
std::cout << (10 > 5) << std::endl; // 1 (true)
std::cout << (10 <= 5) << std::endl; // 0 (false)
std::cout << (10 >= 5) << std::endl; // 1 (true)
std::cout << std::boolalpha;
std::cout << (10 == 10) << std::endl; // true
std::cout << (10 == 5) << std::endl; // false
Логическое выражение может не содержать операторов сравнения вообще. В этом случае число 0
автоматически преобразуется в ложное значение (false
), а любое ненулевое значение (в том числе и отрицательное) — в истинное значение (true
):
std::cout << std::boolalpha;
std::cout << (bool)10 << std::endl; // true
std::cout << (bool)-10 << std::endl; // true
std::cout << (bool)12.5 << std::endl; // true
std::cout << (bool)0.1 << std::endl; // true
std::cout << (bool)"str" << std::endl; // true
std::cout << (bool)"" << std::endl; // true
std::cout << (bool)0.0 << std::endl; // false
std::cout << (bool)0 << std::endl; // false
std::cout << (bool)NULL << std::endl; // false
std::cout << (bool)nullptr << std::endl; // false
// #include <cmath> или #include <math.h>
std::cout << (bool)INFINITY << std::endl; // true
std::cout << (bool)NAN << std::endl; // true
В этом примере мы воспользовались приведением к типу bool
. Внутри логического выражения приведение типов выполнять не нужно, так как оно производится автоматически.
Следует учитывать, что оператор проверки на равенство содержит два символа =
. Указание одного символа =
является логической ошибкой, так как этот оператор используется для присваивания значение переменной, а не для проверки условия. Использовать оператор присваивания внутри логического выражения допускается, поэтому компилятор не выведет сообщение об ошибке, однако программа может выполняться некорректно. Подобную ошибку часто допускают начинающие программисты. Например, в следующем примере вместо проверки равенства числу 11
, производится операция присваивания:
int x = 10;
if (x = 11) {
std::cout << "x == 11" << std::endl;
}
Выражение внутри круглых скобок присвоит переменной x
значение 11
, а затем будет произведено сравнение. Любое число не равное 0
трактуется как логическое значение true
, поэтому в окне консоли отобразится строка x == 11
.
Значение логического выражения можно инвертировать с помощью оператора !
. В этом случае если логическое выражение возвращает false
, то !false
вернет значение true
. Пример:
std::cout << (10 == 5) << std::endl; // 0 (false)
std::cout << !(10 == 5) << std::endl; // 1 (true)
Если оператор !
указать дважды, то любое значение преобразуется в логическое:
std::cout << !!10 << std::endl; // 1 (true)
std::cout << !!0 << std::endl; // 0 (false)
std::cout << !!NULL << std::endl; // 0 (false)
Несколько логических выражений можно объединить в одно большое с помощью следующих операторов:
&&
— логическоеИ
. Логическое выражение вернетtrue
только в случае, если оба подвыражения вернутtrue
. Пример:
std::cout << ( (10 == 10) && (5 != 3) )
<< std::endl; // 1 (true)
std::cout << ( (10 == 10) && (5 == 3) )
<< std::endl; // 0 (false)
||
— логическоеИЛИ
. Логическое выражение вернетtrue
, если хотя бы одно из подвыражений вернетtrue
. Следует учитывать, что если подвыражение вернет значениеtrue
, то следующие подвыражения вычисляться не будут. Например, в логическом выраженииf1() || f2() || f3()
функцияf2()
будет вызвана только если функцияf1()
вернетfalse
, а функцияf3()
будет вызвана, только если функцииf1()
иf2()
вернутfalse
. Пример использования оператора:
std::cout << ( (10 == 10) || (5 != 3) )
<< std::endl; // 1 (true)
std::cout << ( (10 == 10) || (5 == 3) )
<< std::endl; // 1 (true)
Результаты выполнения операторов &&
и ||
показаны в табл. 4.1.
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов