Логические выражения в 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.
Судя по выводу программы вы можете проверить сами себя, если предварительно вручную на листочке или в уме вычислите ответ.
А на это я с вами прощаюсь. До скорых встреч!
Если хотите всегда быть в курсе последних новостей в мире программирования и IT, подписываетесь на мой Telegram-канал, где я делюсь свежими статьями, новостями и полезными советами. Буду рад видеть вас среди подписчиков!
Обсуждение