Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++

Логические выражения и операторы. Python. Урок 5

Логические выражения и логический тип данных

Часто в реальной жизни мы соглашаемся с каким-либо утверждением или отрицаем его. Например, если вам скажут, что сумма чисел 3 и 5 больше 7, вы согласитесь, скажете: «Да, это правда». Если же кто-то будет утверждать, что сумма трех и пяти меньше семи, то вы расцените такое утверждение как ложное.

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

Например, выражение 4 > 5 является логическим, так как его результатом является либо правда, либо ложь. Выражение 4 + 5 не является логическим, так как результатом его выполнения является число.

На позапрошлом уроке мы познакомились с тремя типами данных – целыми и вещественными числами, а также строками. Сегодня введем четвертый – логический тип данных (тип bool). Его также называют булевым. У этого типа всего два возможных значения: True (правда) и False (ложь).

>>> a = True
>>> type(a)
<class 'bool'>
>>> b = False
>>> type(b)
<class 'bool'>

Здесь переменной a было присвоено значение True, после чего с помощью встроенной в Python функции type() проверен ее тип. Интерпретатор сообщил, что это переменная класса bool. Понятия «класс» и «тип данных» в данном случае одно и то же. Переменная b также связана с булевым значением.

В программировании False обычно приравнивают к нулю, а True – к единице. Чтобы в этом убедиться, можно преобразовать булево значение к целочисленному типу:

>>> int(True)
1
>>> int(False)
0

Возможно и обратное.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++ Можно преобразовать какое-либо значение к булевому типу:

>>> bool(3.4)
True
>>> bool(-150)
True
>>> bool(0)
False
>>> bool(' ')
True
>>> bool('')
False

И здесь работает правило: всё, что не 0 и не пустота, является правдой.

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

Говоря на естественном языке (например, русском) мы обозначаем сравнения словами «равно», «больше», «меньше». В языках программирования используются специальные знаки, подобные тем, которые используются в математике: > (больше), < (меньше), >= (больше или равно), <= (меньше или равно), == (равно), != (не равно).

Не путайте операцию присваивания значения переменной, обозначаемую в языке Python одиночным знаком «равно», и операцию сравнения (два знака «равно»). Присваивание и сравнение – разные операции.

>>> a = 10
>>> b = 5
>>> a + b > 14
True
>>> a < 14 - b
False
>>> a <= b + 5
True
>>> a != b
True
>>> a == b
False
>>> c = a == b
>>> a, b, c
(10, 5, False)

В данном примере выражение c = a == b состоит из двух подвыражений. Сначала происходит сравнение (==) переменных a и b. После этого результат логической операции присваивается переменной c. Выражение a, b, c просто выводит значения переменных на экран.

Сложные логические выражения

Логические выражения типа kByte >= 1023 являются простыми, так как в них выполняется только одна логическая операция. Однако, на практике нередко возникает необходимость в более сложных выражениях. Может понадобиться получить ответа «Да» или «Нет» в зависимости от результата выполнения двух простых выражений. Например, «на улице идет снег или дождь», «переменная news больше 12 и меньше 20».

В таких случаях используются специальные операторы, объединяющие два и более простых логических выражения.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++ Широко используются два оператора – так называемые логические И (and) и ИЛИ (or).

Чтобы получить True при использовании оператора and, необходимо, чтобы результаты обоих простых выражений, которые связывает данный оператор, были истинными. Если хотя бы в одном случае результатом будет False, то и все сложное выражение будет ложным.

Чтобы получить True при использовании оператора or, необходимо, чтобы результат хотя бы одного простого выражения, входящего в состав сложного, был истинным. В случае оператора or сложное выражение становится ложным лишь тогда, когда ложны оба составляющие его простые выражения.

Допустим, переменной x было присвоено значение 8 (x = 8), переменной y присвоили 13 (y = 13). Логическое выражение y < 15 and x > 8 будет выполняться следующим образом. Сначала выполнится выражение y < 15. Его результатом будет True. Затем выполнится выражение x > 8. Его результатом будет False. Далее выражение сведется к True and False, что вернет False.

>>> x = 8
>>> y = 13
>>> y < 15 and x > 8
False

Если бы мы записали выражение так: x > 8 and y < 15, то оно также вернуло бы False. Однако сравнение y < 15 не выполнялось бы интерпретатором, так как его незачем выполнять. Ведь первое простое логическое выражение (x > 8) уже вернуло ложь, которая, в случае оператора and, превращает все выражение в ложь.

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

В языке Python есть еще унарный логический оператор not, т. е. отрицание. Он превращает правду в ложь, а ложь в правду.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++ Унарный он потому, что применяется к одному выражению, стоящему после него, а не справа и слева от него как в случае бинарных and и or.

Здесь у < 15 возвращает True. Отрицая это, мы получаем False.

>>> a = 5
>>> b = 0
>>> not a
False
>>> not b
True

Число 5 трактуется как истина, отрицание истины дает ложь. Ноль приравнивается к False. Отрицание False дает True.

Практическая работа

  1. Присвойте двум переменным любые числовые значения.

  2. Используя переменные из п. 1, с помощью оператора and составьте два сложных логических выражения, одно из которых дает истину, другое – ложь.

  3. Аналогично выполните п. 2, но уже с оператором or.

  4. Попробуйте использовать в логических выражениях переменные строкового типа. Объясните результат.

  5. Напишите программу, которая запрашивала бы у пользователя два числа и выводила бы True или False в зависимости от того, больше первое число второго или нет.

Примеры решения и дополнительные уроки в android-приложении и pdf-версии курса

Логические операторы — Introduction to Programming with Python

Введение

Conditionals are a nice way to make decisions by asking if something equals
True or not. But often one condition is not enough.
We may want to take the opposite of our result. Or for instance if we want to
make a decision upon turtle.xcor() and turtle.ycor() we have to combine
them. This can be done with logical operators.

Оператор отрицания

Если мы хотим сделать что-либо ложным, можно использовать not. Это логический оператор:

x = False
if not x :
    print("condition met")
else:
    print("condition not met")

Упражнение

The turtle gives us a useful function to know if it is drawing or not:
turtle.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++ isdown(). This function returns True if the turtle is drawing. As
we have seen earlier, the function turtle.penup() and turtle.pendown()
toggle between drawing while moving, or just moving without a trace.

Можно ли написать функцию, которая заставляет черепашку двигаться вперёд, если перо поднято?

Решение

def stealthed_forward(distance):
    if not turtle.isdown():
        turtle.forward(distance)

This and that or something else

Два простых и понятных оператора: and (“и” в переводе с английского) и or (“или” в переводе с английского), которые делают ровно то, что и обозначают:

if 1 < 2 and 4 > 2:
    print("condition met")

if 1 > 2 and 4 < 10:
    print("condition not met")

if 4 < 10 or 1 < 2:
    print("condition met")

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

Упражнение

Earlier we put the turtle in a circular prison. This time let’s make
it a box. If the turtle goes more than 100 in the X or Y axis then
we turn the turtle back around to the center.

Решение

def forward(distance):
    while distance > 0:
        if (turtle.xcor() > 100
            or turtle.xcor() < -100
            or turtle.ycor() > 100
            or turtle.ycor() < -100):
            turtle.setheading(turtle.towards(0,0))
        turtle.forward(1)
        distance = distance - 1

Логические операторы — Введение в Python

Введение в Python

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

Logical expressions in Python

Logical expressions

  • occur when use compare or boolean operators
  • >, <, ==, is, in, and, or, not
  • are used in if operator
  • return boolean values

Examples

if value > 10:
    # .Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++ ..
if status == 'active':
    # ...
if user.age > 16 and not user.is_banned:
    # ....

Boolean operators

  • AND (binary) — true if both operands are true
  • OR (binary) — true if at least one of operands is true
  • NOT (unary) — reverse

NOT has higher priority than AND and OR

Examples

10 > 2 and 10 > 9         # True
10 > 2 and 10 > 11        # False
10 > 2 or 10 > 11         # True
10 > 2 and not 10 > 11    # True
not (10 > 2 or 10 > 11)   # False

Any object behaves like bool

# False
None    ''    u""    0    0.0     {}     ()     []    set()

# True
- non-empty string or collection
- non-zero number

bool(0)           # False
bool([])          # False
bool('')          # False
bool({})          # False
bool(0.00001)     # True
bool(-1)          # True
bool(' ')         # True
bool(' '.strip()) # False
bool((0, 0, ))    # True
bool(None)        # False

result = 0
if result:
    # no code
else:
    print "result is zero"

data = {}
if data:
   # no code
else:
   # code goes there

How to override bool behaviour

  • Override __nonzero__ method in Py2
  • __bool__ in Py3

How to override bool behaviour

# rarely
class Balance(int):
    def __nonzero__(self):
        return self > 0

balance = Balance(-10)
if balance: # False

# common
class User(object):
    def is_balance_ok(self):
        return self.balance > 0

user = User(balance=-10)
if user.is_balance_ok(): # False

Expressions return values

# Some languages
if (balance > 0) {
    can_pay = True;
} else {
    can_pay = False;
}

# Python
can_pay = balance > 0
can_pay = user.balance > 0 and not user.is_banned
can_pay = (
    user.balance > 0
    and not user.is_banned
    and user.has_perm('buy')
)
is_active = status not in ('banned', 'pending')
can_exit = user.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++ age > 18 and is_confirmed
ok = 'error' not in response['text']
ok = error is None

Is value None?

# bad
val == None
type(None) == types.NoneType

# OK
value is None
value is not None

Ternary operator

var x = (a > b) ? a : b; // javascript
x = (...) if (...) else (...)
x = a if a > b else b
res = (process_good_result(data)
       if data else process_bad_result(data))

Boolean expressions are lazy

def func(x):
    print x
    return bool(x)

res = func(1) and func(0) and func(2) and func(3)    # False
>>> 1 0
res func(1) and func(3) and func(2) and func(0)      # False
>>> 1 3 2 0

res = func(1) or func(2)       # True
>>> 1
res = func(0) or func(1) or func(2) or func(3) # True
>>> 0 1

So put the easiest expressions in OR at the first place.

Conclusion

  • occur when use compare or logical operators
  • return boolean value
  • any object can be used as a predicate
  • value is None, but not value == None
  • use ternary operator
  • remember about laziness

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >

Нашли опечатку или неточность?

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

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++ Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Логические И и ИЛИ. Краткое введение в программирование на Bash

Логические И и ИЛИ

Вы уже видели, что такое управляющие структуры и как их использовать. Для решения тех же задач есть еще два способа. Это логическое И — «&&» и логическое «ИЛИ» — « || ». Логическое И используется следующим образом:

выражение_1&&выражение_2

Сначала выполняется выражение, стоящее слева, если оно истинно, выполняется выражение, стоящее справа. Если выражение_1 возвращает ЛОЖЬ, то выражение_2 не будет выполнено. Если оба выражения возвращают ИСТИНУ, выполняется следующий набор команд. Если какое-либо из выражений не истинно, приведенное выражение считает ложным в целом. Другими словами, все работает так:

если выражение_1 истинно И выражение_2 истинно, тогда выполнять…[15]

Пример использования:

#!/bin/bash

x=5

y=10

if [ «$x» -eq 5 ] && [ «$y» -eq 10 ]; then

echo «Оба условия верны»

else

echo «Условия не верны»

fi

Здесь мы находим, что переменные х и у содержат именно те значения, которые мы проверяем, поэтому проверяемые условия верны. Если вы измените значение с х = 5 на х = 12, а затем снова запустите программу, она выдаст фразу «Условия не верны».


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

выражение_1||выражение_2

Данное выражение в псевдокоде выглядит так:

если выражение_1 истинно ИЛИ выражение_2 истинно, выполняем …

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

#!/bin/bash

x=3

y=2

if [ «$x» -eq 5 ] || [ «$y» -eq 2 ]; then

echo «Одно из условий истинно»

else

echo «Ни одно из условий не является истинным»

fi

Здесь вы видите, что только одно из выражений истинно.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++ Попробуйте изменить значение у и повторно запустите программу. Вы увидите сообщение, что ни одно из выражений не является истинным.

Аналогичная реализация условия с помощью оператора if будет большего размера, чем вариант с использованием логического И и ИЛИ, поскольку потребует дополнительного вложенного if. Ниже приведен код, реализующий тот же функционал, но с использованием оператора if:

#!/bin/bash

x=5

y=10

if [ «$x» -eq 5 ]; then

if [ «$y» -eq 10 ]; then

echo «Оба условия верны»

else

echo «Оба условия неверны»

fi

fi

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












Способы задания логических условий в точке ветвления [BS Docs 4]

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

— вероятности,

— условий,

— правил возникновения экземпляров имитирующих событий.

Способы задания логических условий в разных нотациях перечислены в Табл.1.

Нотация Способ задания логических условий ветвления
Процесс/Процедура Логические условия задаются для каждой стрелки «Связь предшествования», исходящей из фигуры «Решение». В Окне свойств стрелки задается либо вероятность, либо условия. При указании и того, и другого приоритет отдается условиям.
EPC Логические условия задаются для модели каждого события, фигура которого следует после оператора или на диаграмме процесса.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++
В Окне свойств модели события задается либо вероятность, либо условия возникновения его экземпляров. При указании и того, и другого приоритет отдается условиям. Заданные правила возникновения экземпляров события игнорируются.
BPMN вариант 1 Логические условия задаются для стрелок типа «Условный поток управления». В Окне свойств стрелки задается либо вероятность, либо условия. При указании и того, и другого приоритет отдается условиям. При этом если условия заданы, но не выполняются, движок имитации выберет ту ветвь, переход к которой осуществляется по стрелке типа «Поток управления по умолчанию»:

Ветвление без шлюза

BPMN вариант 2 Логические условия задаются для стрелок, исходящих из шлюзов следующих типов:
(Неэксклюзивный шлюз),
(Эксклюзивный шлюз),
(Комплексный шлюз).
В Окне свойств стрелки задается либо вероятность, либо условия. При указании и того, и другого приоритет отдается условиям.
BPMN вариант 3 Логические условия задаются для моделей событий, фигуры которых следуют за Эксклюзивным шлюзом по событиям на диаграмме процесса: . В Окне свойств модели события задаются либо правила возникновения, либо условия. Для модели события рекомендуется задавать правила возникновения, если тип триггера соответствующей фигуры события — Таймер. Для модели события рекомендуется задавать условия, если тип триггера соответствующей фигуры события — Условие. Если для фигуры события выбран другой тип триггера (не Таймер и не Условие), а у модели события заданы и правила возникновения, и условия, то приоритет отдается правилам возникновения. Если не заданы ни правила возникновения, ни условия, то учитываются вероятности. Если и вероятности не заданы, то при имитации все ветви рассматриваются как равновероятные. Ситуация, когда у части моделей событий заданы правила/условия, а у части – вероятности/ничего, считаются неопределенными (выдается ошибка имитации).Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++

Таблица 1. Способы задания логических условий ветвления

Вероятность задается в Окне свойств объекта справочника «События» или стрелки на вкладке Параметры ФСА путем заполнения значения параметра «Вероятность». Для моделей событий или стрелок, следующих после ветвления типа «Исключающее ИЛИ», сумма всех заданных вероятностей должна быть равна 1. Если сумма не равна 1, движок имитации производит приведение этой суммы к 1 автоматически, то есть вероятности пересчитываются пропорционально заданным значениям так, чтобы в сумме была 1.

На Рис.1 показан способ задания вероятности для модели события. Вероятность 0,9 говорит о том, что в 9-ти случаях из 10-ти проект будет утвержден.

Рисунок 1. Задание вероятности

Условия задаются в Окне свойств объекта справочника «События» или стрелки на вкладке Параметры ФСА путем заполнения параметров вкладки Условия. Условие — это логическое выражение, включающее в себя проверку значений переменных. Работа с переменными описана в главе Использование переменных для моделирования временных и логических связей между экземплярами объектов. Для задания условия необходимо создать одно или несколько логических выражения (Рис.2).

Рисунок 2. Задание условий

Описание параметров вкладки Условия приведено в Табл.2.

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

Таблица 2. Описание параметров вкладки «Условия»

Логическое выражение состоит из параметров:

  • Переменная,

  • Оператор,

  • Операнд.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++

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

В качестве Операнда могут быть заданы: значение-константа или значение другой переменной.

Для сравнения используются операторы: ( = ), ( ! = ), ( < ), ( < = ), ( > ), ( > = ). Для переменных типа «Логика» в качестве операторов сравнения могут быть использованы только операторы: ( = ) и ( ! = ).

Урок #4 — Условия и логические операции

Условие (if else), а также оператор switch case это важные вещи в языке программирования c++. В уроке мы изучим логические операции, а также условные операторы, что применяются в языке программирования C++.

Условные операторы очень важны, ведь они позволяют выполнять разный код в зависимости от исхода условия. В языке C++ существует три конструкции позволяющих осуществлять проверку.

Конструкция if — else

За счёт if else можно проверить одно или несколько условий и в случае их успешной проверки будет выполнен один, иначе другой.

Рассмотрим пример:

int a = 2, b = 10;
if (a == b) { // Если a будет равным b, тогда будет выполнен код
	// Здесь код что будет выполнен
	// Если все одна строка кода, то фигурные скобки {}
	// можно не ставить
} else if (a 

Вы можете прописать структуру лишь с одним условием if, а можете дописать в неё сколько-угодно вложенных условий else if.

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

Если необходимо проверить несколько условий в одном операторе, то можно воспользоваться логическим «и» или же логическим «или»:

if (a != b && a > b) {
	// Код будет выполнен, если и первое, и второе условие
	// окажутся верными
}

if (a 

Тернарная операция

Это сокращенная форма if else.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++ Записывается следующим образом:

int x = 90, a = 8;
int res = x 

Проверяем: если “x” будет меньше “а”, то в переменную res устанавливаем их сумму, иначе – их разницу.

Конструкция switch

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

Пример оператора:

int x = 23;
switch (x) { // Проверяем переменную x
	case 1: // Если переменная будет равна 1, то здесь сработает код
		// Может быть множество строк, а не только одна
		cout 

Обзор логических математических инструментов (группа Math > Logical)—Справка

Доступно с лицензией Spatial Analyst.

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

Ниже приведен перечень всех инструментов каждой группы:

  • Булевы:

    Булев оператор And (Boolean And), Булев оператор Or (Boolean Or), Булев оператор XOr (Boolean XOr), Булев оператор Not (Boolean Not)

  • Комбинаторные:

    Комбинаторный оператор «And» (Combinatorial And, Комбинаторный оператор «Or» (Combinatorial Or), Комбинаторный оператор «XOr» (Combinatorial XOr)

  • Относительные:

    Равно (Equal To), Не равно (Not Equal), Больше (Greater Than), Больше или равно (Greater Than Equal), Меньше (Less Than), Меньше или равно (Less Than Equal)

  • Логические:

    Разницы (Diff), В списка (InList), Равно нулю (Is Null), Больше нуля (Over), Критерий (Test)

Булева логика обычно применяет двоичное условие к входным данным и оценивает двоичные условия для выходных данных. Двоичные условия могут быть выражены несколькими способами: «1» и «0», «True» (истина) и «False» (ложь), «yes» (да) и «no» (нет), «on» (вкл) и «off» (выкл) и так далее.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++ В логических математических инструментах условие Ложь (False) представлено значением 0, а условие Истина (True) — значением, отличным от 0.

Булевы инструменты оценивают входные данные только как Истина (True) или Ложь (False) и в качестве результата конкретного инструмента выдают Булево значение 1 или 0 (Истина или Ложь). Комбинаторные инструменты определяют уникальные комбинации входных значений на основе логики конкретного инструмента и выдают разные значения для каждой уникальной комбинации. Относительные инструменты сравнивают одно входное значение относительно другого и возвращают результат в виде Булева значения 1 или 0. Логические инструменты имеют разные способы применения Булевой логики, например, определение только тех входных ячеек, значение которых равны NoData, или использование нужного вам логического выражения для определения того, какие ячейки оцениваются как истинные.

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

Булева оценка

ИнструментОписание

Булев оператор «And» (Boolean And)

Выполняет Булеву операцию И (AND) для значений ячеек двух входных растров.

Если оба входных значения истинны (ненулевые), выходное значение будет 1. Если одно или оба входных значения ложны (нулевые), выходное значение будет 0.

Булев оператор Not (Boolean Not)

Выполняет Булеву операцию Нет (Not) (дополнительно) для значений ячеек двух входных растров.

Если входные значения истинны (ненулевые), выходное значение будет 0. Если входные значения ложные (нулевые), выходное значение будет 1.

Булев оператор «Or» (Boolean Or)

Выполняет Булеву операцию Или (Or) для значений ячеек двух входных растров.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++

Если одно или оба входных значений истинны (ненулевые), выходное значение будет 1. Если оба входных значения ложны (нулевые), выходное значение будет 0.

Булев оператор «XOr» (Boolean XOr)

Выполняет Булеву операцию исключающего Или (XOr) для значений ячеек двух входных растров.

Если одно входное значение истинно (ненулевое), а другое – ложное (нулевое), выходное значение – 1. Если оба входных значения истинны или оба ложны, выходное значение – 0.

Булевы математические инструменты

Комбинаторная оценка

ИнструментОписание

Комбинаторный оператор AND (Combinatorial And)

Выполняет Комбинаторную операцию И (AND) для значений ячеек двух входных растров.

Если оба входных значения истинны (не-нулевые), выходное значение будет уникальным для каждой комбинации входных значений. Если одно или оба значения ложны (нулевые) – выходное значение – 0.

Комбинаторный оператор Or (Combinatorial Or)

Выполняет Комбинаторную операцию Или (Or) для значений ячеек двух входных растров.

Если какое-либо входное значение истинно (не-нулевое), выходное значение будет уникальным для каждой комбинации входных значений. Если оба значения ложны (нулевые) – выходное значение – 0.

Комбинаторный оператор XOr (Combinatorial XOr)

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

Если одно входное значение истинно (не-нулевое), а другое – ложное (нулевое), выходное значение будет уникальным для каждой комбинации входных значений. Если оба входных значения истинные или оба входных значения ложные, выходное значение будет равно нулю.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++

Комбинаторные математические инструменты

Относительная оценка

ИнструментОписание

Равно (Equal To)

Выполняет относительную операцию &quot;равно &quot; (equal-to) для двух входных растров по принципу &quot;ячейка-за-ячейкой &quot;.

Возвращает значение 1 для ячеек выходного растра, в которых значение ячейки первого входного растра равно значению соответствующей ячейки второго входного растра и значение 0 для ячеек, в которых значения не равны.

Больше чем (Greater Than)

Выполняет относительную операцию &quot;больше чем &quot; (greater-than) для двух входных растров по принципу &quot;ячейка-за-ячейкой &quot;.

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

Больше или равно (Greater Than Equal)

Выполняет относительную операцию &quot;больше чем или равно &quot; (greater-than-or-equal-to) для двух входных растров по принципу &quot;ячейка-за-ячейкой &quot;.

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

Оператор Меньше чем (Less Than)

Выполняет относительную операцию &quot;меньше чем &quot; (less-than) для двух входных растров по принципу &quot;ячейка-за-ячейкой &quot;.

Возвращает значение 1 для ячеек, в которых значение в первом растре меньше, чем значение во втором растре и 0 для всех остальных ячеек.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++

Меньше или равно (Less Than Equal)

Выполняет относительную операцию &quot;меньше чем или равно &quot; (less-than-or-equal-to) для двух входных растров по принципу &quot;ячейка-за-ячейкой &quot;.

Возвращает значение 1 для ячеек, в которых значение в первом растра меньше или равно, чем значение во втором растра и 0 для остальных ячеек.

Не равно (Not Equal)

Выполняет относительную операцию &quot;не равно &quot; (not-equal-to) для двух входных растров по принципу &quot;ячейка-за-ячейкой &quot;.

Выдает значение 1 для ячеек, где значения на первом растре не равны значениям на втором растре и 0 для ячеек, значения которых равны.

Относительные математические инструменты

Логическая оценка

ИнструментОписание

Разность(Diff)

Определяет, какие значения из первых входных данных логически отличаются от значений вторых входных данных на основе &quot;ячейка-за-ячейкой &quot;.

Если значения двух входных растров разные, значения первого входного растра записываются в выходной растр. Если значения двух входных растров одинаковые, в соответствующей ячейке выходного растра будет 0.

В списке (InList)

Определяет, какие значения из первых входных данных содержатся в наборе других входных данных на основе &quot;ячейка-за-ячейкой &quot;.

Для каждой ячейки, если значение первого входного растра находится в списке других входных данных, это значение будет присвоено выходному растру. Если оно не найдено, выходным значением в ячейке будет значение NoData.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++

Равно нулю (Is Null)

Определяет, какие значения из входного растра являются значениями NoData на основе &quot;ячейка-за-ячейкой &quot;.

Возвращает значение 1, если входное значение – NoData и 0 для ячеек, значение которых не NoData.

Больше нуля (Over)

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

Тест (Test)

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

Когда выражение оценивается как Истина, выходной ячейке присваивается значение 1. Если выражение ложно, выходной ячейке присваивается значение 0.

Логические математические инструменты

Связанные темы

Отзыв по этому разделу?

Логические операторы — cppreference.com

Логические операторы применяют к своим операндам стандартные операции логической алгебры.

Оператор Имя оператора Пример Результат
! логическое НЕ! А логическое отрицание a
&& логическое И a && b логическое И для a и b
|| логическое ИЛИ a || б логическое ИЛИ a и b

[править] Логическое НЕ

Выражение логического НЕ имеет вид

где

Оператор логического НЕ имеет тип int.Его значение равно 0, если выражение оценивается как значение, не равное нулю. Его значение равно 1, если выражение оценивается как значение, равное нулю.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++ (так что! E совпадает с (0 == E))

 #include 
#include 
#include 
int main (пусто)
{
    bool b =! (2 + 2 == 4); // не правда
    printf ("! (2 + 2 == 4) =% s \ n", b? "true": "false");

    int n = isspace ('а'); // ноль, если 'a' - это пробел, ненулевое значение в противном случае
    int x = !! n; // "bang-bang", обычная идиома C для отображения целых чисел на [0,1]
                 // (все ненулевые значения становятся 1)
    char * a [2] = {"непробел", "пробел"};
    printf ("% s \ n", a [x]); // теперь x можно безопасно использовать как индекс для массива из 2 целых чисел
} 

Выход:

! (2 + 2 == 4) = ложь
непространственный 

[править] Логическое И

Логическое выражение И имеет вид

где

лв. выражение любого скалярного типа
справа выражение любого скалярного типа, которое оценивается только в том случае, если lhs не равно 0

Оператор логического И имеет тип int и значение 1, если оба lhs и rhs не равны нулю.В противном случае он имеет значение 0 (если либо lhs, либо rhs, либо оба сравниваются равными нулю).

После оценки lhs есть точка последовательности. Если результат lhs сравнивается с нулем, тогда rhs вообще не оценивается (так называемая оценка короткого замыкания)

 #include 
#include 
int main (пусто)
{
    bool b = 2 + 2 == 4 && 2 * 2 == 4; // b == истина

    1> 2 && put («это не печатается»);

    char * p = "abc";
    if (p && * p) // обычная идиома C: если p не равно нулю
                // И если p не указывает на конец строки
    {// (обратите внимание, что благодаря оценке короткого замыкания, это
                // не будет пытаться разыменовать нулевой указатель)
    //... // ... затем обрабатываем строку
    }
} 

[править] Логическое ИЛИ

Выражение логического ИЛИ имеет вид

где

лв.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++ выражение любого скалярного типа
справа выражение любого скалярного типа, которое оценивается, только если lhs сравнивается с 0

Оператор логического ИЛИ имеет тип int и значение 1, если сравнение lhs или rhs не равно нулю.В противном случае он имеет значение 0 (если оба параметра слева и справа равны нулю).

После оценки lhs есть точка последовательности. Если результат lhs не равен нулю, тогда rhs вообще не оценивается (так называемая оценка короткого замыкания)

 #include 
#include 
#include 
#include 
int main (пусто)
{
    bool b = 2 + 2 == 4 || 2 + 2 == 5; // правда
    printf ("истина или ложь =% s \ n", b? "истина": "ложь");

    // логическое ИЛИ может использоваться аналогично Perl "или умереть", если rhs имеет скалярный тип
    fopen ("тест.txt "," r ") || printf (" не удалось открыть test.txt:% s \ n ", strerror (errno));
} 

Возможный выход:

 правда или ложь = правда
не удалось открыть test.txt: нет такого файла или каталога 

[править] Ссылки

Стандарт

  • C11 (ISO / IEC 9899: 2011):
  • 6.5.3.3 Унарные арифметические операторы (стр: 89)
  • 6.5.13 Логический оператор И (стр. 99)
  • 6.5.14 Оператор логического ИЛИ (стр. 99)
    Стандарт

  • C99 (ISO / IEC 9899: 1999):
  • 6.5.3.3 Унарные арифметические операторы (стр. 79)
  • 6.5.13 Логический оператор И (стр: 89)
  • 6.5.14 Логический оператор ИЛИ (стр: 89)
  • Стандарт C89 / C90 (ISO / IEC 9899: 1990):
  • 3.3.3.3 Унарные арифметические операторы
  • 3.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++ b
    a << b
    a >> b

    ! A
    a && b
    a || б

    a == b
    a! = B
    a a> b
    a <= b
    a> = b

    a [b]
    * a
    и a
    a-> b
    a.б

    a (…)
    a, b
    (тип) a
    ? :
    размер
    _Alignof (начиная с C11)

    [править] См. Также

    побитовых операторов — разница между & и && в C?

    & — побитовое, а && — логическое и.

    Выражение x && y вернет 1 , если оба значения x и y не равны нулю, и 0 в противном случае.Обратите внимание, что если x равно нулю, то y вообще не будет оцениваться. Это будет иметь значение, если y — выражение с побочными эффектами.

    Выражение x & y будет выполнять побитовую операцию с каждым отдельным битом в x и y . Итак, если x равно 1010 в двоичном формате и y равно 1100 , тогда x & y будет оцениваться как 1000 . Обратите внимание, что возвращаемое значение x & y НЕ должно интерпретироваться как логическое значение.

    Один из способов объяснить это — представить себе, что и — это то же самое, что и применение && к каждому отдельному биту в операндах.

    Также обратите внимание, что & имеет более низкий приоритет, чем && , хотя интуиция подсказывает, что должно быть наоборот. Это также относится к операторам сравнения, таким как <, <= , == , ! = , > = , > .Это восходит к тому времени, когда в C не было операторов && и || Вместо этого использовались и побитовые версии.Логическое и в с: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++ В то время это имело смысл, но когда были добавлены логические операторы, этого больше не было. Керниган и Ричи признали, что в этом было бы больше смысла, но они не исправили это, потому что это нарушило бы существующий код.

    Я не уверен, почему это вернет истину в одном сценарии и ложь в другом.

    Возвращаемое значение из x & y вообще не должно рассматриваться как логическое значение..

    Если задано значение «истина» (1) или «ложь» (0), значения и и | Операторы ведут себя очень похоже на операторы && и || операторов. На практике можно использовать , и | во многих местах, что && и || используются. (В качестве упражнения убедитесь, что «логический» и «поразрядный» операторы приведут к одинаковому поведению при использовании с простыми значениями в операторе if .Вспомните, что , если рассматривает любое ненулевое значение как «истину».)

    Однако есть одно ключевое отличие: оценка короткого замыкания. Предположим, у вас есть две функции: f () и g () . Выражение f () && g () приведет к вызову g () только в том случае, если f () вернет «истинное» значение; если f () возвращает «ложь», то результат «ложь И что-нибудь» всегда ложно.

    Иногда желательно, чтобы вызывалась g () , даже если f () возвращает "false".Обычно это происходит потому, что g () имеет побочный эффект, который должен происходить независимо от f () . В этом случае можно либо а) присвоить возвращаемые значения переменным и использовать && или b) (и менее очевидно) использовать f () & g () , который не замыкает накоротко.

    Итак, && не оценивает свою правую часть, если левая часть ложна, потому что ложь И все всегда ложно. Аналогично || не оценивает RHS, если LHS истинно, потому что истинно ИЛИ что-либо всегда истинно..

    Язык C — логические операторы

    Пример

    логическое И

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

      0 && 0 / * Возвращает 0. * /
    0 && 1 / * Возвращает 0. * /
    2 && 0 / * Возвращает 0. * /
    2 && 3 / * Возвращает 1. * /
      

    Логическое ИЛИ

    Выполняет логическое логическое ИЛИ двух операндов, возвращая 1, если какой-либо из операндов не равен нулю.Логический оператор ИЛИ имеет тип int .

      0 || 0 / * Возвращает 0. * /
    0 || 1 / * Возвращает 1. * /
    2 || 0 / * Возвращает 1. * /
    2 || 3 / * Возвращает 1. * /
      

    Логическое НЕ

    Выполняет логическое отрицание. Оператор логического НЕ имеет тип int . Оператор NOT проверяет, равен ли хотя бы один бит 1, если да, то возвращает 0. В противном случае возвращает 1;

     ! 1 / * Возвращает 0. * /
    ! 5 / * Возвращает 0. * /
    ! 0 / * Возвращает 1.* /
      

    Оценка короткого замыкания

    Есть несколько важных свойств, общих для && и || :

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

    Это означает, что:

    • , если LHS принимает значение «истина» (ненулевое значение), RHS составляет || не будет оцениваться (потому что результат «истина ИЛИ что-либо» равен «истина»),
    • , если LHS оценивается как «ложь» (ноль), RHS && не будет оцениваться (потому что результат «ложь И что-нибудь» — «ложь»).

    Это важно, поскольку позволяет писать такой код, как:

      const char * name_for_value (целое значение)
    {
        static const char * names [] = {"ноль", "один", "два", "три",};
        перечисление {NUM_NAMES = sizeof (имена) / sizeof (имена [0])};
        return (значение> = 0 && значение <ЧИСЛО)? имена [значение]: "бесконечность";
    }
      

    Если в функцию передается отрицательное значение, значение > = 0 член оценивается как ложное, а значение <ЧИСЛО не оценивается.

    C Операторы | Studytonight

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

    Операторы C можно разделить на следующие типы:

    • Арифметические операторы
    • Операторы отношения
    • Логические операторы
    • Побитовые операторы
    • Операторы присваивания
    • Условные операторы
    • Операторы специального назначения

    Арифметические операторы

    C поддерживает все основные арифметические операторы.В следующей таблице показаны все основные арифметические операторы.

    Оператор Описание
    + добавляет два операнда
    - вычесть вторые операнды из первого
    * умножить два операнда
    / делить числитель
    % остаток от деления
    ++ Оператор инкремента - увеличивает целое значение на единицу
    - Оператор декремента - уменьшает целое значение на единицу

    Операторы отношения

    В следующей таблице показаны все операторы отношений, поддерживаемые C.

    Оператор Описание
    == Проверить, равны ли два операнда
    ! = Проверить, не равны ли два операнда.
    > Проверить, больше ли операнд слева, чем операнд справа
    Проверить операнд слева меньше правого операнда
    > = Проверить левый операнд больше чем или равно правому операнду
    <= Проверить, меньше ли операнд слева или равен правому операнду

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

    Язык C поддерживает следующие 3 логических оператора.Предположим, a = 1 и b = 0 ,

    Оператор Описание Пример
    && Логическое И (a && b) неверно
    || Логическое ИЛИ (a || b) верно
    ! Логическое НЕ (! A) ложно

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

    Поразрядные операторы выполняют манипуляции с данными на уровне бит .б 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0

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

    Пример :

      а = 0001000
    b = 2
    а> б = 0000010  

    Операторы присваивания

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

    Оператор Описание Пример
    = присваивает значения правых операндов левому операнду a = b
    + = добавляет правый операнд к левому операнду и назначает результат слева a + = b такой же, как a = a + b
    - = вычитает правый операнд из левого операнда и присваивает результат левому операнду a- = b такое же, как a = ab
    * = Умножить левый операнд на правый и присвоить результат левому операнду a * = b такое же, как a = a * b
    / = делит левый операнд на правый операнд и присвоить результат левому операнду a / = b такое же, как a = a / b
    % = вычислить модуль с использованием двух операндов и присвоить результат левому операнду a% = b то же самое как a = a% b

    Условный оператор

    Условные операторы в языке C известны еще под двумя именами

    1. Тернарный оператор
    2. ? : Оператор

    На самом деле это условие if , которое мы используем при принятии решений на языке C, но с помощью условного оператора мы превращаем оператор условия if в короткий и простой оператор.

    Синтаксис условного оператора:

      выражение 1? выражение 2: выражение 3  

    Пояснение:

    • Вопросительный знак "?" в синтаксисе представляет часть , если .
    • Первое выражение (выражение 1) обычно возвращает истину или ложь, на основании чего решается, будет ли выполнено (выражение 2) или (выражение 3)
    • Если (выражение 1) возвращает истину, тогда выражение слева от ":" i.e (выражение 2) выполняется.
    • Если (выражение 1) возвращает ложь, то выполняется выражение справа от ":" т.е. (выражение 3).

    Специальный оператор

    Оператор Описание Пример
    sizeof Возвращает размер переменной sizeof (x) возвращаемый размер переменной x
    & Возвращает адрес переменная & x; адрес возврата переменной x
    * Указатель на переменную * x; будет указателем на переменную x


    Логические операторы - основы программирования

    Кеннет Лерой Басби и Дэйв Брауншвейг

    Обзор

    Логический оператор - это символ или слово, используемое для соединения двух или более выражений, так что значение создаваемого составного выражения зависит только от значения исходных выражений и от значения оператора.Общие логические операторы включают AND, OR и NOT.

    Обсуждение

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

    Логические операторы часто используются для создания тестового выражения, управляющего выполнением программы. Этот тип выражения также известен как логическое выражение, потому что при вычислении они создают логический ответ или значение.Есть три общих логических оператора, которые дают логическое значение, манипулируя другим логическим операндом (ами). Символы и / или названия операторов различаются в зависимости от языка программирования:

    Язык И ИЛИ НЕ
    C ++ && || !
    С № && || !
    Java && || !
    JavaScript && || !
    Python и или не
    Swift && || !

    Вертикальные черточки или символ трубопровода находятся на той же клавише, что и обратная косая черта \.Вы используете клавишу SHIFT, чтобы получить его. На большинстве клавиатур он находится чуть выше клавиши Enter. Это может быть сплошная вертикальная линия на некоторых клавиатурах и отображаться как сплошная вертикальная линия на некоторых печатных шрифтах.

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

    6> 4 && 2 <= 14
    6> 4 и 2 <= 14

    Это выражение содержит два оператора отношения и один логический оператор. Используя приоритет правил операторов, два оператора «реляционного сравнения» будут выполняться перед оператором «логического и».Таким образом:

    true && true
    True and True

    Окончательная оценка выражения: истина.

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

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

    (6> 4) && (2 <= 14)
    (6> 4) и (2 <= 14)

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

    6> 4 && 8
    6> 4 и 8

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

    true && true
    True and True

    Для сравнения 6 с 4 и 8 вместо этого будет записано как:

    6> 4 && 6> 8
    6> 4 и 6> 8

    Это будет ложно как:

    истина && ложь
    истина и ложь

    Таблицы истинности

    Обычный способ показать логические отношения - это таблицы истинности.

    Логический и (&&)
    х л x и y
    ложный ложь ложь
    ложный правда ложь
    правда ложь ложь
    правда правда правда
    Логический или (||)
    х л x или y
    ложный ложь ложь
    ложный правда правда
    правда ложь правда
    правда правда правда
    Логическое НЕ (!)
    х не x
    ложный правда
    правда ложь

    Примеры

    Я называю этот пример того, почему я ненавижу «и» и люблю «или».

    Каждый день, когда я приходил из школы с понедельника по четверг; Я спрашивал маму: «Можно мне выйти на улицу поиграть?» Она отвечала: «Если ваша комната чистая и у вас сделана домашняя работа, вы можете выйти на улицу и поиграть». Я научился ненавидеть слово «и». Мне удалось выполнить одно из заданий и у меня было время поиграть до обеда, но оба… ну, я ненавидел «и».

    В пятницу моя мать приняла более расслабленную точку зрения, и когда меня спросили, могу ли я выйти на улицу и поиграть, она ответила: «Если ваша комната чистая или ваша домашняя работа сделана, вы можете выйти на улицу и поиграть.«Я научился быстро убирать свою комнату в пятницу днем. Что ж, разумеется, я любил «или».

    В качестве следующего примера представьте, что подросток разговаривает со своей матерью. Во время разговора мама говорит: «Ведь папа у тебя разумный!» Подросток говорит: «Разумно. (короткая пауза) Нет. "

    Может быть, профессора колледжей подумают, что все их студенты готовились к экзамену. Ха-ха! Нет. Что ж, надеюсь, вы уловили суть.

    Примеры:

    • 25 <7 || 15> 36
    • 15> 36 || 3 <7
    • 14> 7 && 5 <= 5
    • 4> 3 && 17 <= 7
    • ! ложь
    • ! (13! = 7)
    • 9! = 7 &&! 0
    • 5> 1 && 7

    Дополнительные примеры:

    • 25 <7 или 15> 36
    • 15> 36 или 3 <7
    • 14> 7 и 5 <= 5
    • 4> 3 и 17 <= 7
    • не Ложь
    • нет (13! = 7)
    • 9! = 7, а не 0
    • 5> 1 и 7

    Ключевые термины

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

    Список литературы

    5.7 - Логические операторы | Изучите C ++

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

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

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

    Оператор Символ Форма Эксплуатация
    Логическое НЕ!! Х истина, если x ложь, или ложь, если x истинна
    Логический И && х && у истина, если и x, и y верны, иначе ложь
    Логическое ИЛИ || x || y истина, если либо x, либо y истинны, иначе ложь

    Логическое НЕ

    Вы уже встречались с унарным оператором логического НЕ в уроке 4.9 - Логические значения. Мы можем суммировать эффекты логического НЕ так:

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

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

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

    bool tooLarge {x> 100}; // tooLarge истинно, если x> 100

    if (! tooLarge)

    // делаем что-нибудь с x

    else

    // выводим ошибку

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

    #include

    int main ()

    {

    int x {5};

    int y {7};

    if (! X> y)

    std :: cout << x << "не больше, чем" << y << '\ n';

    else

    std :: cout << x << "больше, чем" << y << '\ n';

    возврат 0;

    }

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

     5 больше 7
     

    Но x не больше y, как это возможно? Ответ заключается в том, что поскольку оператор логического НЕ имеет более высокий приоритет, чем оператор «больше чем», выражение ! x> y фактически оценивается как (! x)> y .Поскольку x равно 5,! X оценивается как 0, а 0> y ложно, поэтому выполняется инструкция else!

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

    #include

    int main ()

    {

    int x {5};

    int y {7};

    if (! (X> y))

    std :: cout << x << "не больше, чем" << y << '\ n';

    else

    std :: cout << x << "больше, чем" << y << '\ n';

    возврат 0;

    }

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

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

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

    Логическое ИЛИ

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

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

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

    #include

    int main ()

    {

    std :: cout << "Введите число:";

    int value {};

    std :: cin >> value;

    if (value == 0 || value == 1)

    std :: cout << "Вы выбрали 0 или 1 \ n";

    else

    std :: cout << "Вы не выбрали 0 или 1 \ n";

    возврат 0;

    }

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

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

    if (value == 0 || value == 1 || value == 2 || value == 3)

    std :: cout << "Вы выбрали 0, 1, 2 или 3 \ n";

    Новые программисты иногда путают логический оператор ИЛИ (||) с побитовым оператором ИЛИ (|) (будет рассмотрено позже).Несмотря на то, что у них обоих есть OR в имени, они выполняют разные функции. Их смешение, вероятно, приведет к неверным результатам.

    логическое И

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

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

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

    #include

    int main ()

    {

    std :: cout << "Введите число:";

    int value {};

    std :: cin >> value;

    if (value> 10 && value <20)

    std :: cout << "Ваше значение от 10 до 20 \ n";

    else

    std :: cout << "Ваше значение не находится между 10 и 20 \ n";

    возврат 0;

    }

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

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

    if (value> 10 && value <20 && value! = 16)

    // делаем что-то

    else

    // делаем что-то еще

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

    Оценка короткого замыкания

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

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

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

    if (x == 1 && ++ y == 2)

    // что-то сделать

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

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

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

    Смешивание AND и OR

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

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

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

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

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

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

    Многие программисты также ошибаются, полагая, что ! (X && y) - это то же самое, что ! X &&! Y .К сожалению, таким образом нельзя «распространять» логическое НЕ.

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

    ! (X && y) эквивалентно ! X || ! y
    ! (x || y) эквивалентно ! x &&! y

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

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

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

    Логический XOR - это логический оператор, представленный на некоторых языках, который используется для проверки истинности нечетного числа условий.

    Логический XOR
    Левый операнд Правый операнд Результат
    ложный ложь ложь
    ложный правда правда
    правда ложь правда
    правда правда ложь

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

    if (a! = B) ... // a XOR b, предполагая, что a и b являются логическими

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

    если (a! = B! = C! = D)... // a XOR b XOR c XOR d, предполагая, что a, b, c и d являются логическими

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

    if (static_cast (a)! = Static_cast (b)! = Static_cast (c)! = Static_cast (d))... // a XOR b XOR c XOR d, для любого типа, который может быть преобразован в bool

    Время викторины

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