Урок №34. Логический тип данных bool

В повседневной жизни мы часто сталкиваемся с ситуациями, где требуется принять решение сразу: "Да" или "Нет". Является ли апельсин фруктом? Да! Любите ли вы морковь? Нет!
Давайте обсудим утверждение: «Яблоко относится к категории фруктов». Это утверждение верно? Да, безусловно! Яблоко действительно является фруктом. А что насчет утверждения: «Я предпочитаю спаржу». Это абсолютная неправда (фу, какая ужасная ошибка!).
Такие утверждения, которые могут быть либо истинными, либо ложными, настолько распространены, что многие языки программирования включили специальный тип данных для работы с ними - логический тип. В языке программирования C++ этот тип данных называется bool (сокращение от английского "boolean").
Переменные логического типа данных
Переменные логического типа - это переменные, которые могут принимать только два значения: true (1) и false (0).
Для создания логической переменной используется ключевое слово bool :
Для инициализации логической переменной или выполнения операции присваивания используются ключевые слова true или false :
Так же как и унарный оператор минус ( - ), который используется для изменения числа на отрицательное, логический оператор НЕ ( ! ) позволяет изменить значение true на false и наоборот ( false на true ):
Фактически, логические значения не хранятся в виде true или false. Они интерпретируются как целые числа: вместо true используется единица, вместо false — ноль.
Поэтому, если мы попытаемся вывести логические значения с помощью std::cout, мы увидим только 0 или 1:
Результат работы программы:
1
0
0
1
Для того чтобы std::cout выводил значения true или false вместо целых чисел, следует применить манипулятор форматирования std::boolalpha.
Результат работы программы:
1
0
true
false
Использование логического типа данных в ветвлениях if
Часто логические переменные применяются в условных операторах if. Структура условного оператора if выглядит так:
if (выражение) стейтмент1;
Либо:
if (выражение) стейтмент1;
else стейтмент2;
(термин) также известен как "условие" или "условное выражение".
В обоих ситуациях, если условие дает ненулевой результат, то будет выполнен стейтмент1. В случае, если условие дает нулевой результат, то будет выполнен стейтмент2.
Не забывайте, что значение true эквивалентно 1 (не равно нулю), а значение false равно 0 (нулевое значение).
Давайте рассмотрим пример в программном коде:
Итак, вот что у нас получилось:
The condition is true!
Что происходит здесь? Вначале мы проверяем условие if, которое является истинным логическим значением true, то есть 1 (не нулевое значение), что означает, что будет выполнен стейтмент1.
Нижеприведенная программа выполняет те же функции:
Итак, вот что у нас получилось:
b is false!
При проверке условия здесь переменная b равна false. Значение false эквивалентно 0. Следовательно, первое выражение в блоке if (которое true) пропускается, а второе выражение в блоке else (false) выполняется.
Давайте рассмотрим более сложный пример. Оператор равенства (==) используется для сравнения двух чисел (являются ли они равными). Если операнды равны, оператор == вернет true, в противном случае - false:
Результат работы программы:
Enter an integer: 4
The value is non-zero
Давайте разберемся, как работает данный код. Сначала мы просим пользователя ввести целое число. Затем мы используем оператор == для проверки, является ли введенное число нулевым. В данном примере число 4 не равно 0, поэтому условие оператора == оценивается как false. Следовательно, выполняется второй стейтмент (код в блоке else), где выводится сообщение "The value is non-zero".
Возвращаемые значения логического типа данных
Часто в программировании прибегают к использованию логических значений в качестве результатов работы функций. Функции, возвращающие такие значения, часто имеют названия, начинающиеся с is (например, isEquals) или has (например, hasCommonDivisor).
Давайте рассмотрим пример:
Результат работы программы:
Enter an integer: 5
Enter another integer: 5
5 and 5 are equal
Как это происходит? Сначала мы присваиваем значения переменным x и y. Затем происходит проверка условия, что приводит к вызову функции isEqual(5, 5). Внутри этой функции наши два числа сравниваются (5 == 5), что возвращает true (поскольку 5 = 5). Значение true возвращается обратно в вызывающий код. Поскольку условие истинно, выполняется statement1, который выводит "5 и 5 равны".
Придется немного привыкнуть к логическим значениям, но после того, как вы это сделаете, вы удивитесь, насколько они удобны и легко воспринимаемы.
В представленных выше примерах мы использовали логические значения (true или false), логические переменные или функции, возвращающие логическое значение. Однако, что произойдет, если мы не будем использовать логические значения в условиях? В таком случае, если результатом условия будет любое ненулевое значение, будет выполнен стейтмент1.
Поэтому, если попытаться выполнить подобное действие:
Получим hi в результате, так как 4 не равно нулю.
Тест
Что такое простое число? Правильно! Это целое положительное число больше единицы, которое делится без остатка либо на себя, либо на единицу. Напишите скрипт, который попросит пользователя ввести простое целое число, которое меньше 10. Если пользователь введет одно из следующих чисел: 2, 3, 5 или 7 — скрипт выведет сообщение "The digit is prime", в противном случае — "The digit is not prime".
Подсказка : Используйте ветвление if для сравнения чисел и логические значения для отслеживания того, является ли пользовательское число простым или нет.
Comments