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

   ⁄ 

 Обновлено 17 Апр 2017

  ⁄   

В реальной жизни, перед нами очень часто возникают вопросы, на которые можно ответить однозначно: «да» или «нет». «Яблоко – это фрукт?». Да. «Вам нравится спаржа?». Нет.

Рассмотрим утверждение: «Яблоко – это фрукт». Является ли это правдой? Очевидно, что так. Или как насчет: «Я люблю спаржу». Абсолютная ложь (тьфу!).

Подобные предложения, которые имеют только два возможных исхода: да/правда или нет/ложь, настолько распространены, что многие языки программирования добавили специальный тип для работы с ними. Он называется логический тип данных (boolean).

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

Логические переменные — это переменные, весь диапазон которых состоит только из двух возможный значений: true (1) и false (0).

Объявить их можно с помощью ключевого слова bool.

Инициализировать переменную или присвоить ей значение «правда» или «ложь» можно с помощью ключевых слов true или false.

Так же, как используя унарный оператор минус (-) мы можем сделать число отрицательным, так и с помощью логического оператора НЕ (!) мы можем поменять местами логические значения с true на false, или, наоборот, с false на true.

На самом деле логические значения не сохраняются в логических переменных «true» или «false». Вместо этого, они хранятся в виде целых чисел: true (истина) — это целое число 1, а false (ложь) – целое число 0. Аналогично, в коде, они не рассматриваются как значения «истина» или «ложь». Они рассматриваются как числа: 0 или 1.

Следовательно, если мы попытаемся вывести логические значение, std::cout покажет нам только 0 или 1:

Результат:

1
0
0
1

Если вы хотите, чтобы std::cout выводил «true» или «false» вместо цифр – используйте std::boolalpha:

Результат:

1
0
true
false

Использование boolean в ветвлении if

Очень часто логические переменные применяются в стейтментах if. Ветвление if, как правило, имеет следующий вид:

if (expression) statement1;

или

if (expression) statement1;
else statement2;

Expression (выражение), которое в дужках, еще называется условие (condition) или условное выражение (conditional expression).

В обоих случаях, условия проверяются. Если их результат — ненулевое значение, тогда выполняется statement1. И наоборот, если результат — нулевое значение, тогда выполняется statement2.

Помните, что true — это 1 (ненулевое значение), а false – 0 (нулевое значение).

Теперь в коде:

Результат:

the condition is true

Рассмотрим детальнее. Во-первых, мы начинаем с условия if. Выражение «true» оценивается как 1 (ненулевое значение), значит, выполняться будет инструкция под if (statement1).

Следующая программа работает так же:

Результат:

b is false

Здесь уже, при проверке условия, переменная b имеет значение false. false вычисляется как 0. Следовательно, первый стейтмент под if (который true) не выполняется, зато выполняется стейтмент под else (который false).

Пример сложнее

Оператор равенства (==) позволяет проверить два числа на их равенство между собой. Оператор == возвращает true, если операнды равны и false, если такими не являются.

Результат:

Enter an integer: 4
The value is non-zero

Давайте разберемся, как это работает. Во-первых, пользователь вводит целочисленное значение. Далее, с помощью оператора == мы проверяем, равно ли введенное значение значению 0. В этом примере, 4 не равно 0, поэтому оператор == определяет условие как false. Это приводит к выполнению части else, где указано вывести на экран текст “The value is non-zero”.

Логические возвращаемые значения

Логические значения часто используются в качестве возвращаемых в функциях, которые проверяют, истинно ли что-то или нет. Имена таких функций, зачастую, начинаются со слов is (например, isEqual) или has (например, hasCommonDivisor).

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

Результат:

Enter an integer: 5
Enter another integer: 5
5 and 5 are equal

Как это работает? Во-первых, мы вводим целочисленные значения переменных х и у. Далее проверяется условие, что приводит к вызову функции isEqual(5, 5). Внутри этой функции, сравнение чисел (5 == 5) приводит к возвращаемому значению true (так как 5 равно 5). True возвращается обратно в caller. Так как условие истинно, то выполняется часть под if (statement1), выводя текст «5 and 5 are equal».

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

Нелогические условия

Во всех примерах выше, в наших условиях были либо логические значения (true или false), либо логические переменные, либо функции, которые возвращают логическое значение. А что произойдет, если наше условие не будет вычисляться к логическому значению?

Вы уже знаете ответ. Если результатом условия будет ненулевое значение, тогда выполняться будет statement1.

Поэтому, если сделать что-то вроде этого:

То результатом будет «hi», так как 4 — ненулевое значение.

Ввод логических значений

Рассмотрим следующую программу:

Результат:

Enter a boolean value: true
You entered: 119

Подождите-ка? А что это за чепуха такая?

Оказывается, что std::cin принимает только два числа в качестве логических переменных: 0 и 1 (не true и не false). Все другие значения вызовут сбой std::cin. Так как мы ввели «true», в std::cin произошел сбой и переменная b оказалась без своего значения. Следовательно, std::cout выведет любой мусор, который находился в то время внутри переменной b.

Тест

1) Простое число – это натуральное число, больше 1, которое делится только на себя или на 1. Напишите программу, которая просит пользователя ввести простое целое число. Если пользователь ввел одно из этих: 2, 3, 5 или 7 — программа должна вывести текст “The digit is prime”. В противном случае, “The digit is not prime”.

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

Ответ

Чтобы увидеть результат, нажмите на ссылку.

Ответ 1

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (19 оценок, среднее: 4,89 из 5)
Загрузка...
Поделиться в:
Подписаться на обновления:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *