Операторы сравнения

Операторы сравнения используются в логических выражениях. Перечислим операторы сравнения, доступные в языке 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.

Таблица 4.1. Операторы && и ||

Учебник C++ (Qt Creator и MinGW)
Учебник C++ (Qt Creator и MinGW) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов