Логические операции в C++

Почти во всех языках программирования программист при написании программы может использовать условия в качестве рычагов управления программой. В зависимости от результата: выполнение или невыполнение условия — программа ведёт себя так, как описывал программист.
В С++ есть три логические операции: логическое И, логическое ИЛИ, логическое отрицание. Они помогают создавать сложные условия из простых.
Использование этих логических операций напоминает человеческое мышление. Прочитать человек любую из этих операций может очень легко. В разных языках программирования они могут обозначаться по-разному. В языке C++ эти операции обозначаются так:
Логическое ИЛИ
||
Общее условие считается выполненным, если хотя бы одна из проверок даёт положительный результат

Логическое И
&&
Общее условие считается выполненным только если все проверки прошли успешно

Логическое отрицание
!
Общее условие считается выполненным, если результатом проверки оказывается ложное утверждение

В приведённой программе вы должны ввести два числа. Первое число будет храниться в переменной "a", второе в "b", будет производиться проверка, что первое число 100 и что второе число 100, или что первое число 100 или второе число 100. В зависимости от результатов проверки будут выводиться разные результаты.
Чаще всего логическое отрицание используют для того, чтобы проверить, что проверяемое или ноль, или false.
Очень часто пишут неполное выражение:

На самом деле это в полной версии выглядит так:

Смысл в том, что если условие верно, то true можно пропускать, делая код короче, чем, собственно, все пользуются. Иногда нужно перевернуть всё с ног на голову и заявить о том, что для выполнения какого-то блока кода, проверяемое условием выражение должно оказаться ложным, в таком случае используют операцию отрицания:

На самом деле это в полной версии выглядит так:

Все три логические операции отдают результат своих действий, результатом может обозначаться только два варианта исхода: или утверждение справедливо, или утверждение неверно. В случае верности утверждения мы получим 1, в случае неверности получим 0:

Используя логические операции, можно составлять сложные проверки:

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

Эта зависимость происходит из порядка выполнения операций, о котором говорилось буквально только что. Поэтому лучше первое время используйте круглые скобки, как вы могли бы это делать в обычных арифметических примерах.
В современных компиляторах давно существует специальный тип для работы с булевыми значениями, тип bool, в старых компиляторах этого типа не было. В старых компиляторах обходились нулём или не нулём, если ноль, то это обозначало ложь, если не ноль, то истину. Много компиляторов давно поддерживает тип bool, переменные этого типа могут неявно приводиться к целому значению, в случае неявного приведения они оказываются или нулём (если ложь), или единицей (если истина). Поэтому объект cout выводит ноль или единицу в зависимости от справедливости высказывания.
Подводим промежуточные итоги:
  • В С++ существует только три логические операции: И (&&), ИЛИ (||), НЕ (!)
  • Каждая из трёх операций производит нам результат: верно или неверно.
  • Для выяснения правильности всех проверок используется операция И
  • Для выяснения правильности хотя бы одной проверки используется операция ИЛИ
  • Для выяснения неправильности утверждения используется операция НЕ, которой можно выявить или 0, или false
  • У логических операций есть определённый порядок приоритетов: первой выполняется операция логического отрицания, второй выполняется операция логического И, третьей выполняется операция логического ИЛИ
Иногда новички по ошибке используют не логические операции, а битовые. Битовые операции отличаются от логических операций, хотя по результатам работы и способу их использования можно говорить о схожести логических и битовых операций. Важное отличие логических операций от битовых в том, что логические операции возвращают нам значение булева типа, т. е. либо истину, либо ложь, а битовые операции возвращают нам число. Другое важное отличие логических операций от битовых в том, что у логических операций порядок выполнения проверок происходит слева-направо, а у битовых операций порядок проверок не определён.

Такие ошибки очень сложно выявлять, потому что код работает. С точки зрения компилятора код написан правильно, ведь он, компилятор, не может знать, что вы задумывали, поэтому и ошибок таких компилятор не распознает. А вот найти такую засаду бывает очень сложно. Поэтому, если вы не работаете с битами (если вы работаете с битами, то об этом будете знать), то будьте внимательны к написанию логических операций. Логические операции вы будете очень часто использовать в ветвлениях if для проверки выполнения условий и в циклах, определяя до каких пор циклы должны будут работать.
Некоторые люди включают XOR в логические операции. Не верьте тем людям. Они меня как-то тоже ввели в заблуждение, а я вводил в заблуждение своих читателей, это очень плохо. XOR — это битовая операция. В этой статье битовые операции не рассматриваются.

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

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

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/saymon-marlou/parallelnoe-i-konkurentnoe-programmirovanie-na-yazyke-haskell-22873018/?lfrom=15589587
Яндекс.Метрика