Логические выражения в C++: И, ИЛИ, НЕ, сравнение и другие

обложка статьи

Всем привет! Сейчас пойдет о логических операторах в C++. Поскольку нам постоянно надо что-то сравнивать (например что больше, а что меньше), то нам надо иметь возможность реализовывать подобный функционал и в C++.

Логические переменные

Для того, чтобы мы могли хранить данные логического типа, нам надо знать о логических переменных. Мы уже встречались и ими в нашем прошлом уроке. Но давайте повторим:

  • Логические данные хранятся в переменных типа bool.
  • Хранить они могут только два значения:
    • “Верно” - это true;
    • “Лож” - это false;

Теперь давайте узнаем какие логические операторы существуют в C++.

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

Язык C++ имеет 5 различных операторов сравнения в своем арсенале. Также существуют такие операторы, которые являются комбинациями других. Все они вам должны быть знакомы из курса математики, поэтому их изучение не должно вызвать у вас проблем.

Давайте разберем по порядку каждый из них:

  • A < B - сравнивает две переменные и возвращает true, если A меньше B.
  • A > B - возвращает true, если A строго больше B.
  • A == B - проверяет на равенство переменные A и B.
  • A != B - проверяет переменные A и B на неравенство.
  • A >= B - нестрогое неравенство. Возвращает true, если A больше или равно B.
  • A <= B - противно неравенству A > B.

Теперь давайте разберем пару примеров, тем самым подкрепим теорию практикой:

bool r; int a = 5, b = 7; // создали переменные с которыми будем работать

r = a > b; // r содержит false, поскольку 5 < 7
r = a <= b; // r содержит true
r = a <= 5 // r равен true
r = b == 9 // r содержит false, поскольку 7 != 9

Из примера видно, что в качестве A и B мы можем использовать не только переменные, но и простые числа.

Мы немного поэкспериментировали с операторами сравнения, однако пока не можем сгруппировать несколько из них и следственно создать серьезное логическое выражение. Для этих целей мы и будем применять логические операторы.

Логические операторы

Для комбинации сразу нескольких логических выражений мы должны использовать один или набор логических операторов.

Давайте рассмотрим следующий список:

  • A && B - эквивалент “И”. Соответственно возвращает true, если A и B являются истиной.
  • A || B - эквивалент логического “ИЛИ”. Вернет true ели хотя бы одно из выражений является истинным.
  • A xor B - этот оператор можно сравнить с “ТОЛЬКО ОДИН”, соответственно вернет true если A == true и B == false, или наоборот.
  • !A - данный оператор инвертирует значение A. То есть, если A == true, то он вернет false и наоборот.

Здесь самая главная “причуда” логических операторов - это их обозначения в C++. В остальном они интуитивно понятны.

Теперь давайте попробуем на примере скомбинировать несколько логических выражений и вывести их значения на экран. Заранее расскажу про следующую строку:

cout.setf(ios::boolalpha);

она отвечает за форматный вывод bool переменных (вывод слов вместо чисел). Дело в том, что по умолчанию C++ при выводе логических значений используются два значения:

  • 1 для true;
  • 0 для false;

Таким образом мы “приукрасим” вывод нашей программы и сделаем его более читабельным.

Вот наша программа:

#include <iostream>
using namespace std;

int main() {
    cout.setf(ios::boolalpha);

    bool r; // создаем переменную bool типа
    int a = 10, b = 7; // а также две переменные типа int

    r = (a < b) && (b == 7); // r равно false, поскольку a > b
    cout << "r = " << r << endl; // вывод результата

    r = a < b || b == 7; // r равен true
    cout << "r = " << r << endl; // вывод результата

    r = (a < b) xor (b == 7); // r равен true, поскольку только b == 7 верно
    cout << "r = " << r << endl; // вывод результата

    r = !(a == 10 && (b <= 8 || true)); // комбинируем целую кучу операторов
    cout << "r = " << r << endl; // и снова выводим результат

    return 0;
}

Как видите мы можем пользоваться скобками, чтобы указать порядок выполнения логических операций также, как и при арифметических операциях. Также скобки можно и вовсе опустить, но это может создать путаницу в программе (именно поэтому я не рекомендую так делать).

Давайте посмотрим, что же выводит наша программа:

r = false
r = true
r = true
r = false

Process returned 0 (0x0) execution time : 0.020 s
Press any key to continue.

Судя по выводу программы вы можете проверить сами себя, если предварительно вручную на листочке или в уме вычислите ответ.

А на это я с вами прощаюсь. До скорых встреч!

« Инкремент и декремент в C++

Математические операции в C++ »

Обсуждение