Укажите логические операции не и или
Перейти к содержимому

Укажите логические операции не и или

  • автор:

11 Основные логические операции (“и”, “или”, “не”).

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

Объединение двух (или нескольких) высказываний в одно с помощью союза “и” называется операцией логического умножения или конъюнкцией. Эту операцию принято обозначать знаком “л” или знаком умножения “ • ”. Сложное высказывание А/\В истинно только в том случае, когда истинны оба входящих в него высказывания. Истинность такого высказывания задается следующей таблицей:

Объединение двух (или нескольких) высказываний с помощью союза “или” называется операцией логического сложения, или дизъюнкцией. Эту операцию обозначают знаком “v” или знаком сложения “+”. Сложное высказывание AvB истинно, если истинно хотя бы одно из входящих в него высказываний. Таблица истинности для логической суммы высказываний имеет вид:

Присоединение частицы “не” к данному высказыванию называется операцией отрицания. Она обозначается А и читается “не А”. Если высказывание А истинно, то А ложно, и наоборот. Таблица истинности в этом случае имеет вид:

Эти логические операции принято называть основными, потому что через них можно выразить любые другие логические операции. Например, операция импликации (А—>В), таблица истинности которой имеет вид:

может быть представлена как дизъюнкция не А и

Еще одна логическая операция, называемая эк-виваленцией (А~В), имеет следующую таблицу ис-

и может быть представлена в виде дизъюнкции двух высказываний (А-В) и (А- В), т. е. А~В = (А • B)v(A • В).

В вычислительной технике для построения более сложных логических устройств используются три основных логических элемента — “И”, “ИЛИ”, “НЕ”, которые реализуют три основных логических операции: дизъюнкции (элемент “ИЛИ”), конъюнкции (элемент “И”) и отрицания (элемент “НЕ”).

Благодаря тому что любая логическая операция может быть представлена с помощью трех основных логических операций, набора элементов “И”, “ИЛИ” и “НЕ” в принципе достаточно для построения любого устройства процессора компьютера.

Рассмотрим в качестве примера, как может быть построен двоичный сумматор (т. е. устройство для сложения чисел в двоичной системе счисления) из элементов “И”, “ИЛИ” и “НЕ”.

Вспомним, что при сложении чисел образуется сумма в данном разряде и перенос в соседний старший разряд. Поэтому мы имеем дело с двумя разными логическими операциями: суммирование в одном разряде (обозначим эту операцию как S) и перенос <Р) в другой разряд. Таблицы истинности этих логических операций имеют следующий вид:

Логические операторы — AND, OR, NOT, XOR

Логические логические операторы выполняют логические операции с логическими операндами. Операторы включают унарное логическое отрицание ( ! ), двоичное логическое И (), OR ( & | ) и монопольное ИЛИ ( ^ ), а также двоичный условный логический и () и OR ( && || ).

  • Унарный ! (логическое отрицание) оператор.
  • Бинарные & (логическое И), | (логическое ИЛИ), а также ^ (логическое исключающее ИЛИ) операторы. Эти операторы всегда обрабатывают оба операнда.
  • Бинарные && (условное логическое И) и || (условное логическое ИЛИ) операторы. Эти операторы вычисляют правый операнд, только если это необходимо.

Для операндов целочисленных типов операторы & , | и ^ выполняют побитовые логические операции. Дополнительные сведения см. в разделе Побитовые операторы и операторы сдвига.

Оператор логического отрицания !

Унарный префиксный оператор ! выполняет логическое отрицание операнда, возвращая true , если операнд имеет значение false , и false , если операнд имеет значение true .

bool passed = false; Console.WriteLine(!passed); // output: True Console.WriteLine(!true); // output: False 

Унарный оператор постфикса ! является оператором , допускающим значение NULL.

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

Оператор & вычисляет логическое И для всех своих операндов. Результат операции x & y принимает значение true , если оба оператора x и y имеют значение true . В противном случае результат будет false .

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

В следующем примере правый операнд оператора & является вызовом метода, который выполняется независимо от значения левого операнда:

bool SecondOperand() < Console.WriteLine("Second operand is evaluated."); return true; >bool a = false & SecondOperand(); Console.WriteLine(a); // Output: // Second operand is evaluated. // False bool b = true & SecondOperand(); Console.WriteLine(b); // Output: // Second operand is evaluated. // True 

Условный оператор логического И && также вычисляет логическое И для своих операндов, но не вычисляет правый операнд, если левый операнд имеет значение false .

Для операндов целочисленных типов оператор & вычисляет побитовое логическое И своих операндов. Унарный оператор & является оператором AddressOf.

Оператор логического исключения ИЛИ ^

Оператор ^ вычисляет логическое исключение ИЛИ для всех своих операндов, возвращая true для x ^ y , если x имеет значение true и y имеет значение false или x имеет значение false и y имеет значение true . В противном случае результат будет false . То есть для операндов bool оператор ^ возвращает тот же результат, что и оператор неравенства != .

Console.WriteLine(true ^ true); // output: False Console.WriteLine(true ^ false); // output: True Console.WriteLine(false ^ true); // output: True Console.WriteLine(false ^ false); // output: False 

Для операндов целочисленных типов оператор ^ вычисляет побитовое исключающее ИЛИ своих операндов.

Оператор логического ИЛИ |

Оператор | вычисляет логическое ИЛИ для всех своих операндов. Результат операции x | y принимает значение true , если хотя бы один из операторов x или y имеет значение true . В противном случае результат будет false .

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

В следующем примере правый операнд оператора | является вызовом метода, который выполняется независимо от значения левого операнда:

bool SecondOperand() < Console.WriteLine("Second operand is evaluated."); return true; >bool a = true | SecondOperand(); Console.WriteLine(a); // Output: // Second operand is evaluated. // True bool b = false | SecondOperand(); Console.WriteLine(b); // Output: // Second operand is evaluated. // True 

Условный оператор логического ИЛИ || также вычисляет логическое ИЛИ для своих операндов, но не вычисляет правый операнд, если левый операнд имеет значение true .

Для операндов целочисленных типов оператор | вычисляет побитовое логическое ИЛИ своих операндов.

Условный логический оператор AND &>

Условный оператор логического И && (оператор короткого замыкания) вычисляет логическое И для своих операндов. Результат операции x && y принимает значение true , если оба оператора x и y имеют значение true . В противном случае результат будет false . Если x вычисляется false значение , y не вычисляется.

В следующем примере правый операнд оператора && является вызовом метода, который не выполняется, если левый операнд имеет значение false :

bool SecondOperand() < Console.WriteLine("Second operand is evaluated."); return true; >bool a = false && SecondOperand(); Console.WriteLine(a); // Output: // False bool b = true && SecondOperand(); Console.WriteLine(b); // Output: // Second operand is evaluated. // True 

Оператор логического И & также вычисляет логическое И для своих операндов, но он всегда вычисляет оба операнда.

Условный оператор логического ИЛИ ||

Условный оператор логического ИЛИ || (оператор короткого замыкания) вычисляет логическое ИЛИ для своих операндов. Результат операции x || y принимает значение true , если хотя бы один из операторов x или y имеет значение true . В противном случае результат будет false . Если x вычисляется true значение , y не вычисляется.

В следующем примере правый операнд оператора || является вызовом метода, который не выполняется, если левый операнд имеет значение true :

bool SecondOperand() < Console.WriteLine("Second operand is evaluated."); return true; >bool a = true || SecondOperand(); Console.WriteLine(a); // Output: // True bool b = false || SecondOperand(); Console.WriteLine(b); // Output: // Second operand is evaluated. // True 

Оператор логического ИЛИ | также вычисляет логическое ИЛИ для своих операндов, но всегда вычисляет оба операнда.

Операторы, допускающие логическое значение NULL

Для операндов bool? операторы & (логическое И) и | (логическое ИЛИ) поддерживают следующую логику с тремя значениями:

  • Оператор & возвращает true только в том случае, если оба операнда имеют значение true . Если x или y имеет значение false , оператор x & y возвращает false (даже если другой операнд имеет значение null ). В противном случае выражение x & y будет иметь значение null .
  • Оператор | возвращает false только в том случае, если оба операнда имеют значение false . Если x или y имеет значение true , оператор x | y возвращает true (даже если другой операнд имеет значение null ). В противном случае выражение x | y будет иметь значение null .

Эта семантика описывается в следующей таблице:

x г x&y x|y
true true true true
true false false true
true null null true
false true false true
false false false false
false null false null
null true null true
null false false null
null null null null

Поведение этих операторов отличается от типичного поведения операторов, допускающих значение NULL. Как правило, оператор, определенный для операндов типа значения, также можно использовать с операндами соответствующего типа значения, допускающего значение NULL. Такой оператор возвращает null , если какой-либо из операндов имеет значение null . При этом операторы & и | могут возвращать отличное от NULL значение, даже если один из операндов имеет значение null . См. подробнее о поведении операторов, допускающих значение NULL, в разделе Операторы с нулификацией в статье Типы, допускающие значение NULL.

Вы также можете также использовать операторы ! и ^ с операндами bool? , как показано в следующем примере:

bool? test = null; Display(!test); // output: null Display(test ^ false); // output: null Display(test ^ null); // output: null Display(true ^ null); // output: null void Display(bool? b) => Console.WriteLine(b is null ? "null" : b.Value.ToString()); 

Условные логические операторы && и || не поддерживают операнды типа bool? .

Составное присваивание

Для бинарного оператора op выражение составного присваивания в форме

x op= y 
x = x op y 

за исключением того, что x вычисляется только один раз.

Операторы & , | и ^ поддерживают составное присваивание, как показано в следующем примере:

bool test = true; test &= false; Console.WriteLine(test); // output: False test |= true; Console.WriteLine(test); // output: True test ^= false; Console.WriteLine(test); // output: True 

Условные логические операторы && и || не поддерживают составное присваивание.

Приоритет операторов

В следующем списке перечислены логические операторы в порядке убывания приоритета:

  • Оператор логического отрицания. !
  • Оператор логического И &
  • Оператор логического исключающего ИЛИ ^
  • Оператор логического ИЛИ |
  • Условный оператор логического И &&
  • Условный оператор логического ИЛИ ||

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

Console.WriteLine(true | true & false); // output: True Console.WriteLine((true | true) & false); // output: False bool Operand(string name, bool value) < Console.WriteLine($"Operand is evaluated."); return value; > var byDefaultPrecedence = Operand("A", true) || Operand("B", true) && Operand("C", false); Console.WriteLine(byDefaultPrecedence); // Output: // Operand A is evaluated. // True var changedOrder = (Operand("A", true) || Operand("B", true)) && Operand("C", false); Console.WriteLine(changedOrder); // Output: // Operand A is evaluated. // Operand C is evaluated. // False 

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

Возможность перегрузки оператора

Определяемый пользователем тип может перегружать операторы ! , & , | и ^ . При перегрузке бинарного оператора соответствующий оператор составного присваивания также неявно перегружается. Явная перегрузка составного оператора присваивания для пользовательского типа невозможна.

Определяемый пользователем тип не может перегружать условные логические операторы && и || . При этом, если определяемый пользователем тип каким-либо образом перегружает операторы true и false и операторы & и | , операция && или || может быть применена для операндов этого типа. Дополнительные сведения см. в разделе Пользовательские условные логические операторы в Спецификации языка C#.

Спецификация языка C#

Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#:

  • Оператор логического отрицания
  • Логические операторы
  • Условные логические операторы
  • Составное присваивание

См. также

  • Операторы и выражения C#
  • Побитовые операторы и операторы сдвига

Совместная работа с нами на GitHub

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

Логические выражения в C++: И, ИЛИ, НЕ, сравнение и другие

обложка статьи

Всем привет! Сейчас пойдет о логических операторах в C++. Поскольку нам постоянно надо что-то сравнивать (например что больше, а что меньше), то нам надо иметь возможность реализовывать подобный функционал и в C++.

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

  • Логические данные хранятся в переменных типа bool.
  • Хранить они могут только два значения:
    • “Верно” — это true ;
    • “Лож” — это false ;

    Теперь давайте узнаем какие логические операторы существуют в C++.

    Язык C++ имеет 5 различных операторов сравнения в своем арсенале. Также существуют такие операторы, которые являются комбинациями других. Все они вам должны быть знакомы из курса математики, поэтому их изучение не должно вызвать у вас проблем.

    Давайте разберем по порядку каждый из них:

    • A < B - сравнивает две переменные и возвращает true, если A меньше B.
    • A > B — возвращает true, если A строго больше B.
    • A == B — проверяет на равенство переменные A и B.
    • A != B — проверяет переменные A и B на неравенство.
    • A >= B — нестрогое неравенство. Возвращает true, если A больше или равно B.
    • A B.

    Теперь давайте разберем пару примеров, тем самым подкрепим теорию практикой:

    bool r; int a = 5, b = 7; // создали переменные с которыми будем работать r = a > b; // r содержит false, поскольку 5 < 7r = a  b; // r содержит true r = a  5 // r равен true r = b == 9 // r содержит false, поскольку 7 != 9

    Из примера видно, что в качестве A и B мы можем использовать не только переменные, но и простые числа.

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

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

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

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

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