Рассмотрим логический тип данных в языке C++. Переменная данного типа может принимать только два значения: true (истина) или false (ложь). Логический тип данных в языке С++ обозначается словом bool.
Например, сохраним в переменную bb результат вычисления выражения x<3:
bool b = x < 3;
Теперь переменная bb примет значение true (истина), если x<3, и false (ложь) — в противном случае (если x⩾3).
Чаще всего логический тип данных возникает при сравнении каких-то объектов (например, целых чисел). Есть шесть операций сравнения:
- < меньше
- > больше
- <= меньше или равно
- >= больше или равно
- == равно
- != не равно
Приоритет операций сравнения меньше, чем у арифметических операций. Например, если написать x+5<x∗2, то сначала будет посчитан результат выражений x+5 и x∗2 и только затем произойдёт сравнение.
Операции <, >, <=, >= имеют одинаковый приоритет. Операции == и != тоже имеют одинаковый приоритет, но более низкий, чем <, >, <= и >=.
Рассмотрим ещё несколько примеров использования логического типа данных. Например, проверим, является ли число чётным:
bool isEven = x%2 == 0;
Теперь проверим, что число является нечётным, с помощью логической операции «отрицание»:
bool isOdd = !isEven;
Существуют ещё две логические операции:
- && «логическое И» используется в ситуации, когда должны быть верны оба выражения
- || «логическое ИЛИ» используется в ситуации, когда должно быть верно одно из выражений
Приоритет этих логических операций самый низкий, они выполняются после арифметических операций и операций сравнения. При этом сначала выполняются операции отрицания, потом операции «логического И», и только затем операции «логического ИЛИ». Изменить приоритет выполнения операций можно с помощью круглых скобок.
Проверим, является ли число xx номером месяца:
bool c = (x >= 1 && x <= 12);
Обратите внимание, что двойные неравенства в С++ в подобных случаях использовать нельзя! Если вы запишете выражение 1<=x<=12, то сначала выполнится первое сравнение, а затем его результат true или false, приведённый к числовому значению 1 или 0 соответственно, будет сравниваться с числом 12, в результате всегда получится значение true.
Рассмотрим пример. Пусть на дереве было n белочек и x орешков, которые они делят между собой поровну (остаток скидывается с дерева). Необходимо проверить, верно ли, что каждой белочке достанется ровно y орешков. Проверим также, что нам дали корректную задачу, а именно количество белок — положительное число.
bool ok = n > 0 && x / n == y;
В данном примере важно обратить внимание на то, что если n=0, то первая часть выражения вернёт ложь, поэтому вторая часть выражения вычисляться не будет, а значит не будет деления на 0. Если бы мы поменяли части логического выражения местами, то программа выдала бы ошибку при n=0.
Логический тип данных можно преобразовать в числовой. В этом случае true будет преобразован в 1, а false в 0.
Например, пусть космонавтом может быть человек, который удовлетворяет двум характеристикам из трёх:
- рост h<=170 см;
- веc w<=65 кг;
- IQ>=150.
Проверим, можем ли мы взять человека с данным ростом, весом и IQ в космонавты:
int num = (h <= 170) + (w <= 65) + (IQ >= 150);
bool goToCosmos = num >= 2;