Логические операторы и или не кратко

Обновлено: 02.07.2024

Эта лицензия позволяет другим редактировать, поправлять и брать за основу ваше произведение в некоммерческих целях до тех пор пока они указывают вас в качестве автора и лицензируют их новые творения на идентичных условиях.

Основы логики. Логические операции и таблицы истинности

На данной странице будут рассмотрены 6 логических операций: конъюнкция, дизъюнкция, инверсия, импликация, эквивалентность и исключающие или, которых вам будет достаточно для решения сложных логических выражений. Также мы рассмотрим порядок выполнения данных логических операций в сложных логических выражениях и представим таблицы истинности для каждой логической операции.

Высказывание - это повествовательное предложение, про которое можно определенно сказать истинно оно или ложно (истина (логическая 1), ложь (логический 0)).

Логические операции - мыслительные действия, результатом которых является изменение содержания или объема понятий, а также образование новых понятий.

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

Сложное логическое выражение - логическое выражение, состоящее из одного или нескольких простых логических выражений (или сложных логических выражений), соединенных с помощью логических операций.

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

ABF
111
100
010
000

2) Логическое сложение или дизъюнкция:

Дизъюнкция - это сложное логическое выражение, которое истинно, если хотя бы одно из простых логических выражений истинно и ложно тогда и только тогда, когда оба простых логических выраженbя ложны.
Обозначение: F = A v B.

Таблица истинности для дизъюнкции

ABF
111
101
011
000

3) Логическое отрицание или инверсия:

Инверсия - это сложное логическое выражение, если исходное логическое выражение истинно, то результат отрицания будет ложным, и наоборот, если исходное логическое выражение ложно, то результат отрицания будет истинным. Другими простыми слова, данная операция означает, что к исходному логическому выражению добавляется частица НЕ или слова НЕВЕРНО, ЧТО.

Обозначение: F = ¬ A.

Таблица истинности для инверсии

A ¬ А
10
01

4) Логическое следование или импликация:

Импликация - это сложное логическое выражение, которое истинно во всех случаях, кроме как из истины следует ложь. То есть данная логическая операция связывает два простых логических выражения, из которых первое является условием (А), а второе (В) является следствием.

Обозначение: F = A → B.

Таблица истинности для импликации


ABF
111
100
011
001

5) Логическая равнозначность или эквивалентность:

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

ABF
111
100
010
001



6) Операция XOR (исключающие или)

Обозначение: F = A ⊕ B .

AB F
110
101
011
000

Порядок выполнения логических операций в сложном логическом выражении

1. Инверсия;
2. Конъюнкция;
3. Дизъюнкция;
4. Импликация;
5. Эквивалентность.

Для изменения указанного порядка выполнения логических операций используются скобки.

Таблицы истинности можно составить и для произвольной логической функции F(a, b, c…).

В общем случае таблицы истинности имеют размер 2 N строк комбинаций для N независимых логических переменных.


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

Законы алгебры логики

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

Строго говоря, это не законы, а теоремы. Но их доказательство не входит в программу изучения. Впрочем, доказательство обычно основывается на построении полной таблицы истинности.

Замечание. Знаки алгебры логики намеренно заменены на сложение и умножение.


Замена операций импликации и эквивалентности

Операций импликации и эквивалентности иногда нет среди логических операций конкретного компьютера или транслятора с языка программирования. Однако для решения многих задач эти операции необходимы. Существуют правила замены данных операций на последовательности операций отрицания, дизъюнкции и конъюнкции.

Так, заменить операцию импликации можно в соответствии со следующим правилом:

A → B = ¬ A \/ B


Для замены операции эквивалентности существует два правила:


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


Они составляют основу любых дискретных алгоритмов. На использовании этих логических операций построена работа многих шкафов автоматики и релейных схем. Такие решения до сих пор массово используются на значительном числе производств. Это один из советов читателям, куда нужно применить информацию, полученную на этих страницах. Представьте, огромный шкаф релейной автоматики Вы можете заменить одним или несколькими маленькими ПЛК. При этом перестанете постоянно следить за состоянием вечно ломающихся реле.


Для того чтобы разобраться с работой дискретной логики, нам понадобится несколько входов и выходов ПЛК. Для этого Вы раскрываете элементы конфигурации ПЛК и задаете шесть дискретных входов. Пусть это будут переменные x1, х2, хЗ и т.д.


• Вы определились с target-файлом,

• создали главную программу и выбрали язык программирования,

• задали время работы цикла ПЛК,

• определились с необходимыми входами и выходами,

• сохранили проект на вашем компьютере.




Затем проводим линии связи.

Вместо знаков вопроса прописываем имя переменной y1. Затем проводим линию связи между выходом операции AND и переменной y1.

Во время первых опытов работы с CoDeSys у Вас могут возникать некоторые сложности с изменением положения тех или иных элементов программы в рабочей области. Давайте разберем подробнее этот момент. Если Вам необходимо передвинуть один или несколько элементов программы в другое место, Вы выделяете нужную часть алгоритма, удерживая ЛКМ .


Постарайтесь сделать так, чтобы все элементы целиком попали в выделенную область. В результате, после отпускания ЛКМ один или несколько элементов окажутся выделенными пунктиром .




что должно было у Вас получиться.


Важный момент! С выхода одного и того же блока или из одной и той же переменной линию связи Вы можете вести на один или несколько возможных приемников этого самого сигнала. Поясню: из операции OR мы можем протянуть вторую линию связи на вход операции NOT. Для этого нажимаем ЛКМ на выход блока OR, т.е. на самый конец выходящей из него линии связи .


Удерживая ЛКМ, перетаскиваем вторую линию связи на вход блока NOT


, затем отпускаем ЛКМ. Полученный результат изображен на рисунке.


Таким же образом можно добавить и третью, и четвертую, и еще большее количество связей. Тут главное - не переусердствовать, во всем необходима мера.

Тем же способом вы можете значение одной и той же переменной передавать на несколько блоков.




Для того чтобы удалить ненужную линию связи, Вы выделяете один из ее концов . Затем нажимаете на клавиатуре кнопку Del (Delete).

Вернемся к нашему алгоритму. Теперь, когда на выходе операции OR будет значение FALSE, у нас с Вами на выходе уЗ будет появляться сигнал TRUE, в то время как в переменной у2 он будет пропадать. И наоборот, когда на выходе OR появляется сигнал TRUE, он записывается в у2. В блоке NOT этот сигнал будет преобразовываться в FALSE и поступать в переменную уЗ. А в результате релейные выходы нашего ПЛК все время будут в разных состояниях.





На экране появляется копия выбранной части алгоритма. Нажав и удерживая ЛКМ на выделенных частях появившейся копии, мы перетаскиваем ее на новое место в рабочей области.


Теперь нам необходимо поменять в заголовке элемента оператор OR на оператор XOR. В качестве входных данных мы будем использовать переменные х5 и хб. Для замены имени переменной Вы просто нажимаете на соответствующий блок входа ЛКМ. Затем с клавиатуры вводите новое имя. Результат работы блока XOR будем передавать в переменную у4.


Сейчас мы с Вами все это проверим, запустив программу непосредственно на ПЛК. Прежде чем это делать, еще несколько вещей, которые полезно себе записать и запомнить.

Перед загрузкой проекта на исполнение:

• Сохраняем проект (Ctrl+s).






Такого же эффекта можно добиться, выделив блок и нажав сочетание клавиш Ctrl+A. Если какой-то вход Вам не нужен, то выделяете его ЛКМ и нажимаете Delete на вашей клавиатуре .


Статья создана на основе книги Кирилла Гайнутдинова "Простое и понятное программирование в CODESYS".


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

Здесь в этой статье пойдет речь о булевой логике.

По существу булева логика - это отдельная ветвь/отдельное направление компьютерной науки, которая изучает истинные и ложные значения для решения комплексных логических проблем .

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

Это очень похоже на арифметические операторы, которые работают с числовыми значениями.

Итак, основные логические операторы – это операторы: И, ИЛИ и НЕ.

Стоит отметить, что булева логика не является спецификацией Javascript . Она верна для всего программирования.

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

Логический оператор И - Таблица Истинности


Итак, для примера мы имеем две булевы переменные, которые могут быть либо истинны true , либо ложны false .

A: Sarah has a driver's license - У Сары есть водительские права.

B: Sarah has good vision - У Сары хорошее зрение.

Каждое из этих высказываний является условием, которое может быть либо истинным, либо ложным: true или false . Потому что Сара может НЕ иметь водительских прав и НЕ иметь хорошего зрения .

Теперь, используя логический оператор И в контексте A И B , мы можем совместить эти высказывания как булевы переменные. Итак, у Сары есть водительские права И у нее хорошее зрение.

Что будет результатом это операции?

Для этого существует так называемая таблица истинности. Ее вы можете видеть на иллюстрации выше. Здесь мы видим два возможных варианта для каждой из переменных. А само выражение A И B в качестве результата имеет 4 возможных комбинации .

И теперь все что мы делаем заключается в том, чтобы подключить значение наших переменных и получить результат операции логического И из этой таблицы .

Итак, что мы можем видеть в этой таблице: только в том случае, если A и B истинны , то есть принимают значение true , только тогда результатом операции А И В будет также истина true .

И это имеет смысл. В этом есть логика. В конце концов, он называется логический оператор И. Итак, еще раз: что оператор И делает? Он возвращает true только, если оба значения выражения A И B истинны .

Во всех других ситуациях , если одна или каждая из переменных A и B ложны - принимают значение false , результат будет false .

Конечно, это правило распространяется и на большее количество операндов. Переменных может быть больше чем две. Например, три A и B и C. При этом результат будет истинным - true , если каждая из этих переменных истинна. И соответственно если любая из них принимает значение false , то и результат будет ложным.

Все это, конечно, может сбить вас с толку.

Но не стоит волноваться, дальше мы будем работать с примерами, и на практике все прояснится. И со временем не нужна будет таблица истинности.

Двигаемся дальше и переходим к логическому оператору ИЛИ.

Логический оператор ИЛИ


Логический оператор ИЛИ работает иначе.

Рассмотрим наш пример с оператором ИЛИ. Является Сара водителем ИЛИ она хорошо видит? Если немного подумать, то мы можем уже интуитивно сообразить, что в случае с оператором ИЛИ мы получим истину true , если хотя бы одна из переменных будет принимать значение true . И таблица истинности для оператора ИЛИ подтверждает это.

Итак, в отличии от оператора И оператор ИЛИ работает так, что даже если одна из переменных это false результат будет все равно истинным. Другими словами, если любое из значений A или B true , тогда оператор ИЛИ также становиться истинным true . Вот почему этот оператор называется ИЛИ .

И если у вас есть несколько/более двух переменных достаточно, чтобы одна из них была true , чтобы сделать всю операцию истиной true .

Все это будет иметь больший смысл, как только мы начнем изучать это на практике.

Но у нас еще есть оператор НЕ.

Оператор НЕ

Понять, как работает оператор НЕ намного проще. Потому что он не объединяет несколько значений.

Оператор НЕ действует только на одно логическое значение и по существу просто переворачивает/инвертирует его (меняет значение на противоположное).

Так если А - true , то оно станет false .

Если же А - это false , то НЕ А - это true . Все очень просто.

Итак, мы поговорили о том, как работают три основных логических оператора. Но, конечно же, лучшим способом понять это является практика.

Примеры работы с операторами И ИЛИ и НЕ

Есть переменная age = 16 и есть две логические переменные:

A: Age is greater or equal 20 (возраст больше или равен 20) и

B: Age is less than 30 (возраст менее 30 лет)

Давайте определим их значения

Итак, если age = 16 , то этот нельзя сказать, что этот возраст больше или равен 20 , поэтому переменная A это false .

Но можно сказать, что 16 - это возраст менее 30 лет , поэтому переменная B это true .

Теперь давайте работать с переменными A и B, используя логические операторы.

Работа с оператором НЕ

A --> false - A это false , НО

!A --> true - НЕ A это true .

Для переменной B наоборот:

B --> true - B это true , НО

!B --> false - НЕ B это false .

Итак, все, что делает оператор НЕ - это инвертирует (меняет на противоположное) логическое значение переменной .

Работа с оператором И

Итак, мы уже знаем, что A это false , а B это true .

Каков результат выражения A И B ?

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

A --> false И B --> true = false

Напомним еще раз , как работает логический оператор И: выражение может быть истинным true только в том случае , если все его составляющие истинны true . Если же хотя бы одна из логических переменных принимает значение false , то и все выражение будет ложным false .

Работа с оператором ИЛИ

Каков результат выражения A ИЛИ B ?

Смотрим на таблицу истинности для оператора ИЛИ, из которой следует, что это выражение истинно - true .

A --> false ИЛИ B --> true = true

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

Работа с операторами И и НЕ

Добавим в логическое выражение для оператора И оператор НЕ:

НЕ A И B

!A --> true И B --> true = true

Работа с операторами ИЛИ и НЕ

A ИЛИ НЕ B

Здесь нужно отметить следующее: оператор НЕ имеет приоритет перед операторами И и ИЛИ. То есть сначала конвертируется значение, с которым работает оператор НЕ, и только после этого прорабатывается комбинация с использованием операторов И или ИЛИ.

Итак, в выражении A ИЛИ НЕ B сначала выполняется оператор НЕ, и только потом ИЛИ.

A --> false ИЛИ !B --> false = false

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

Хотя операторы отношения (сравнения) могут использоваться для проверки того, является ли конкретное условие истинным или ложным, они могут проверять только одно условие за раз. Но часто нам нужно знать, выполняются ли одновременно несколько условий. Например, чтобы проверить, выиграли ли мы в лотерею, мы должны сравнить, все ли выбранные нами числа совпадают с выигрышными числами. В лотерее с 6 числами это будет включать 6 сравнений, и все они должны быть верными. В других случаях нам нужно знать, выполняется ли какое-либо из нескольких условий. Например, мы можем решить пропустить работу сегодня, если мы заболели, или если мы слишком устали, или если мы выиграли в лотерею в нашем предыдущем примере. Это потребует проверки того, верно ли какое-либо из трех сравнений.

Возможность тестирования несколько условий нам дают логические операторы.

В C++ есть 3 логических оператора:

Логические операторы
ОператорОбозначениеПример использованияОперация
Логическое НЕ (NOT) ! !x true , если x равен false ; или false , если x равен true
Логическое И (AND) && x && y true , если и x ,и y равны true ; в противном случае – false
Логическое ИЛИ (OR) || x || y true , если x или y равен true ; в противном случае – false

Логическое НЕ (NOT)

Логическое НЕ (оператор ! )
ОперандРезультат
true false
false true

Если операнд логического НЕ вычисляется как true , логическое НЕ вычисляется как false . Если операнд логического НЕ вычисляется как false , логическое НЕ вычисляется как true . Другими словами, логическое НЕ меняет логическое значение с true на false и наоборот.

Логическое НЕ часто используется в условных выражениях:

Следует остерегаться того, что логическое НЕ имеет очень высокий уровень приоритета. Начинающие программисты часто делают следующую ошибку:

Эта программа напечатает:

Правильный способ написать приведенный выше фрагмент:

Таким образом, сначала будет вычислено x > y , а затем логическое НЕ инвертирует логический результат.

Лучшая практика

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

Простое использование логического НЕ, например if (!value) , не требует скобок, потому что приоритет здесь не играет роли.

Логическое ИЛИ (OR)

Оператор логического ИЛИ используется для проверки того, выполняется ли одно из двух условий. Если значение левого операнда истинно, или значение правого операнда истинно, или оба значения истинны, то логический оператор ИЛИ возвращает true . В противном случае он вернет false .

Логическое ИЛИ (оператор || )
Левый операндПравый операндРезультат
false false false
false true true
true false true
true true true

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

В этом случае мы используем логический оператор ИЛИ, чтобы проверить, истинно ли левое условие ( value == 0 ) или правое условие ( value == 1 ). Если одно из них (или оба) истинны, логический оператор ИЛИ принимает значение true , что означает выполнение инструкции if . Если ни одно из них не является истинным, результат логического оператора ИЛИ будет false , что означает выполнение инструкции else .

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

Логическое И (AND)

Логический оператор И используется для проверки истинности обоих операндов. Если оба операнда равны true , логическое И возвращает true . В противном случае возвращается false .

Логическое И (оператор && )
Левый операндПравый операндРезультат
false false false
false true false
true false false
true true true

Например, нам может потребоваться узнать, находится ли значение переменной x в диапазоне от 10 до 20. На самом деле это два условия: нам нужно знать, больше ли x , чем 10, а также меньше ли x , чем 20.

В этом случае мы используем оператор логическое И, чтобы проверить, истинны ли левое условие ( value > 10 ) и правое условие ( value ). Если оба условия истинны, оператор логическое И принимает значение true , и выполняется инструкция if . Если ни одно из условий или хотя бы одно из них не соответствует истине, оператор логическое И принимает значение false , и выполняется инструкция else .

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

Если все эти условия верны, будет выполнена инструкция if . Если какое-либо из этих условий ложно, будет выполняться инструкция else .

Вычисление по короткой схеме

Чтобы логическое И возвращало true , оба операнда должны иметь значение true . Если первый операнд вычисляется как false , логическое И знает, что оно должно возвращать false , независимо от того, вычисляется ли второй операнд как true или false . В этом случае оператор логическое И немедленно вернет false , даже не вычисляя второй операнд! Это известно как вычисление по короткой схеме и выполняется в основном в целях оптимизации.

Точно так же, если первый операнд для логического ИЛИ равен true , тогда всё условие ИЛИ должно вычисляться как true , и второй операнд не вычисляется.

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

Если x не равно 1, всё условие должно быть ложным, поэтому ++y никогда не вычисляется! Таким образом, y будет инкрементироваться только в том случае, если x равен 1, что, вероятно, не совсем то, что задумывал программист!

Предупреждение

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

Как и в случае с логическим и побитовым ИЛИ, начинающие программисты иногда путают оператор логическое И ( && ) с оператором побитовое И ( & ).

Смешивание И и ИЛИ

Смешивания операторов логическое И и логическое ИЛИ в одном выражении часто невозможно избежать, но это область, полная потенциальных опасностей.

Многие программисты предполагают, что логическое И и логическое ИЛИ имеют одинаковый приоритет (или забывают, что это не так), точно так же, как сложение/вычитание и умножение/деление. Однако логическое И имеет более высокий приоритет, чем логическое ИЛИ, поэтому операторы логическое И будут вычисляться перед операторами логическое ИЛИ (если они не заключены в скобки).

Начинающие программисты часто пишут такие выражения, как value1 || value2 && value3 . Поскольку логическое И имеет более высокий приоритет, это выражение вычисляется как value1 || (value2 && value3) , а не как (value1 || value2) && value3 . Надеюсь, это то, чего хотел программист! Если программист предполагал вычисление слева направо (как это происходит со сложением/вычитанием или умножением/делением), он или она получит не тот результат, который не ожидался!

При смешивании логического И и логического ИЛИ в одном выражении рекомендуется явно заключать в скобки каждый оператор и его операнды. Это помогает предотвратить ошибки приоритета, упрощает чтение кода и четко определяет, как вы рассчитывали вычислять выражение. Например, вместо записи value1 && value2 || value3 && value4 , лучше написать (value1 && value2) || (value3 && value4) .

Лучшая практика

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

Закон де Моргана

Закон де Моргана говорит нам, как логическое НЕ должно распределяться в этих случаях:

Другими словами, когда вы распределяете логическое НЕ, вам также необходимо преобразовать логическое И в логическое ИЛИ, и наоборот!

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

Где логический оператор исключающее ИЛИ (XOR)?

Логический оператор исключающее ИЛИ (XOR) – это логический оператор, представленный на некоторых языках, который используется для проверки истинности нечетного числа условий.

Логическое исключающее ИЛИ
Левый операндПравый операндРезультат
false false false
false true true
true false true
true true false

В C++ нет оператора л огическое исключающее ИЛИ . В отличие от логического ИЛИ или логического И, логическое исключающее ИЛИ не может быть вычислено по короткой схеме. По этой причине создание оператора логическое исключающее ИЛИ из операторов логического ИЛИ и логического И является сложной задачей. Однако вы можете легко имитировать логическое исключающее ИЛИ (XOR), используя оператор неравенства ( != ):

Это выражение можно расширить до нескольких операндов следующим образом:

Обратите внимание, что приведенные выше шаблоны логического исключающего ИЛИ работают только в том случае, если операнды являются логического типа (не целочисленными значениями). Если вам нужна форма логического исключающего ИЛИ, которая работает с не-логическими операндами, вы можете использовать static_cast для преобразования их в bool :

Небольшой тест

Вопрос 1

Вычислите следующие выражения.

означает, что мы вычислили (1 , чтобы прийти к (true || [3 != 3]) , и вычислили его, чтобы прийти к true . 3 != 3 никогда не выполнялся из-за вычисления по короткой схеме.

a) (true && true) || false

b) (false && true) || true

Вычисление по короткой схеме имеет место быть, если первый операнд || равен true .

Читайте также: