Логические выражения в C++ — урок 5
Всем привет! Сейчас пойдет о логических операторах в 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.
Теперь давайте разберем пару примеров, тем самым подкрепим теорию практикой:
1 2 3 4 5 6 |
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++. В остальном они интуитивно понятны.
Теперь давайте попробуем на примере скомбинировать несколько логических выражений и вывести их значения на экран. Заранее расскажу про следующую строку:
1 |
cout.setf(ios::boolalpha); |
она отвечает за форматный вывод bool
переменных (вывод слов вместо чисел). Дело в том, что по умолчанию C++ при выводе логических значений используются два значения:
- 1 для true;
- 0 для false;
Таким образом мы «приукрасим» вывод нашей программы и сделаем его более читабельным.
Вот наша программа:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#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; } |
Как видите мы можем пользоваться скобками, чтобы указать порядок выполнения логических операций также, как и при арифметических операциях. Также скобки можно и вовсе опустить, но это может создать путаницу в программе (именно поэтому я не рекомендую так делать).
Давайте посмотрим, что же выводит наша программа:
Из судя по выводу программы вы можете проверить сами себя, если предварительно вручную на листочке или в уме вычислите ответ.
Теперь я вам рекомендую пройти тест по пройденной теме.
Тест на тему «Логические выражения»
Если эта надпись не исчезает долгое время, попробуйте обновить страницу. Этот тест использует javascript. Пожалуйста, влкючите javascript в вашем браузере.
А на это я с вами прощаюсь. До скорых встреч!
Если возникли вопросы, то задавайте их в комментариях.
!((x > y <= 4) && (x = 4 || z == 7)))
Какие числа подставить для того, что бы ответом была единица (1)?
а где видео
К сожалению, автор видео больше не может их снимать.
error C2146: синтаксическая ошибка: отсутствие «;» перед идентификатором «xor»
error C3861: xor: идентификатор не найден
Исправьте
В visual c++ оператор xor, пишется как ^
16 строка получается
r = (a < b) ^ (b == 7); // r равен true, поскольку только b == 7 верно
Вы правы. Однако в наших уроках мы используем компилятор MinGW, а не Visual C++. В данном примере также можно использовать и
^
вместоxor
.