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

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

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

Помощь сайту

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

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