Логические операторы: не
Третий логический оператор, ! (восклицательный знак), называется отрицанием. Он превращает логическое значение в противоположное: !true — это false, а !false — это true. Читайте его как «не»:
bool isRaining = false;
if (!isRaining) {
std::cout << "Зонт не нужен" << std::endl;
}Программа выведет:
Зонт не нуженisRaining равно false, поэтому !isRaining равно true, и блок выполняется. Читайте условие как «если дождя нет». Можно было бы написать и isRaining == false. Это то же самое, но ! короче.
Отрицание особенно полезно с логическими переменными и при объединении условий. «Магазин открыт и сегодня не праздник» — это isOpen && !isHoliday. С сравнениями оно обычно не нужно: вместо «возраст не меньше 18» просто напишите противоположное сравнение, age < 18.
! относится только к тому, что стоит сразу за ним. Чтобы отрицать целое сравнение или составное условие, возьмите его в скобки: !(points >= 50) или !(hasLicense && hasCar). Без скобок программа сделает совсем другое:
int points = 30;
if (!points >= 50) {
std::cout << "Не сдано" << std::endl;
}
std::cout << "Готово" << std::endl;Программа выведет:
ГотовоУ ученика всего 30 баллов, и всё же программа не выводит Не сдано. Здесь ! относится только к points: !points — это false, потому что 30 не равно 0, а false >= 50 (то есть 0 >= 50) — ложь. Программа компилируется без ошибки, компилятор лишь выводит предупреждение, которого здесь не видно. Правильно писать !(points >= 50) или, ещё проще, points < 50.
Задание
- 1
Напишите инструкцию
if, которая выводитПойду на улицу, если интернет не работает. Используйте!. - 2
На улицу стоит выходить, только если нет дождя. Расширьте условие с помощью
&&так, чтобы оно было истинно, только если интернет не работает и при этом нет дождя (!isRaining). Затем добавьте веткуelse, которая выводитПочитаю книгу.