Логическое ИЛИ, И и НЕ в информатике: обозначения и таблицы истинности

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

Разбираем обозначения пяти логических операций, таблицы истинности, порядок вычисления по соглашениям ЕГЭ и запись в Python, C, JavaScript, Excel и SQL на проверенных примерах кода.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 2963 статьи автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3617 экспертных мнений Подписаться на Телеграм-канал
Обложка: Логическое ИЛИ, И и НЕ в информатике: обозначения и таблицы истинности

ИЛИ в информатике называют дизъюнкцией, или логическим сложением. Выражение «A ИЛИ B» истинно, если истинно хотя бы одно из условий, и ложно только тогда, когда ложны оба. В учебниках и на ЕГЭ его пишут знаком ∨ (на клавиатуре \/ или |), в Python словом or, в C, Java и JavaScript двумя чертами ||, в Excel функцией ИЛИ().

Рядом с ИЛИ живут ещё четыре операции: НЕ, И, импликация и тождество. Ниже их обозначения, таблицы истинности, порядок вычисления и то, как они записываются в коде. Арифметические и прочие знаки Python разобраны отдельно в статье об операторах в Python.

CheckroiCheckroiПодборка курсов по информатике135 курсов • 30 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Логические операции и их обозначения

Рой у доски объясняет логические операции

Логическая операция берёт одно или два высказывания со значениями «истина» (1) и «ложь» (0) и возвращает новое такое же значение. Этим разделом математики занимается алгебра логики, её ещё называют булевой алгеброй по имени Джорджа Буля. В школе тему проходят в 8 классе и повторяют перед экзаменом, её разбирают почти все курсы по информатике с подготовкой к ЕГЭ.

Обозначения в учебной колонке взяты из соглашений, которые печатают в начале каждого варианта ЕГЭ по информатике (демоверсия ФИПИ на 2027 год).

Операция Другое название Учебник и ЕГЭ Python C, Java, JavaScript Истинна, когда
НЕ инверсия, отрицание ¬A not a !a A ложно
И конъюнкция, логическое умножение A ∧ B, A & B a and b a && b истинны оба
ИЛИ дизъюнкция, логическое сложение A ∨ B, A | B a or b a || b истинно хотя бы одно
Импликация следование, «если A, то B» A → B not a or b !a || b всегда, кроме случая A = 1, B = 0
Тождество эквивалентность A ≡ B a == b a == b значения совпадают
Исключающее ИЛИ XOR, строгая дизъюнкция A ⊕ B a != b, a ^ b a != b, a ^ b значения различаются

Отдельного оператора для импликации ни в одном из этих языков нет. Её собирают из НЕ и ИЛИ: в соглашениях демоверсии ЕГЭ прямо сказано, что A → B и ¬A ∨ B равносильны.

Исключающего ИЛИ в списке обозначений ЕГЭ нет. Если в задаче оно всё же встретилось, его расписывают через отрицание тождества: A ⊕ B = ¬(A ≡ B).

Таблица истинности для двух переменных

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

A B ¬A A ∧ B A ∨ B A → B A ≡ B A ⊕ B
0 0 1 0 0 1 1 0
0 1 1 0 1 1 0 1
1 0 0 0 1 0 0 1
1 1 0 1 1 1 1 0

Таблицу можно получить и проверить на Python. Скрипт ниже выводит ровно эти строки (если Python ещё не стоит на компьютере, начните с инструкции по установке):

from itertools import product

print("A B | not A | A and B | A or B | A -> B | A == B | A != B")
for a, b in product([0, 1], repeat=2):
    print(a, b, "|", int(not a), "    |", int(a and b), "      |", int(a or b),
          "     |", int((not a) or b), "     |", int(a == b), "     |", int(a != b))

Запомнить импликацию помогает обещание: «если сдам экзамен, куплю велосипед». Обещание нарушено только в одном случае: экзамен сдан, а велосипеда нет. Если экзамен не сдан, обещание не нарушено, что бы ни случилось с велосипедом.

Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Приоритет логических операций

Без скобок операции выполняются в таком порядке (так он записан в соглашениях ЕГЭ):

  1. инверсия (¬);
  2. конъюнкция (∧);
  3. дизъюнкция (∨);
  4. импликация (→);
  5. тождество (≡).

Поэтому ¬A ∧ B ∨ C ∧ D читается как ((¬A) ∧ B) ∨ (C ∧ D). Операции одного уровня идут слева направо: A ∨ B ∨ C значит (A ∨ B) ∨ C.

В языках программирования порядок тот же для трёх основных операций. В Python, по грамматике языка, сильнее всех связывает not, за ним and, слабее всех or, а сравнения вроде == и < выполняются ещё раньше, чем not. В C и JavaScript то же самое: !, потом &&, потом ||.

Проверить, что Python понимает выражение так же, как экзаменатор, можно перебором всех 16 наборов:

from itertools import product

for a, b, c, d in product([0, 1], repeat=4):
    f = (not a) and b or c and d
    g = ((not a) and b) or (c and d)
    assert bool(f) == bool(g)
print("порядок совпадает на всех 16 наборах")

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

Как построить таблицу истинности для выражения

Рой заполняет таблицу из нулей и единиц

На ЕГЭ по информатике это задание 2: дана функция и фрагмент её таблицы, нужно понять, какой столбец какой переменной соответствует. Подробнее о том, какие экзамены сдают на ИТ-специальности, читайте в статье что сдавать на программиста.

Порядок работы руками такой:

  1. Посчитайте переменные. Строк будет 2n: при трёх переменных восемь, при четырёх шестнадцать.
  2. Выпишите наборы по порядку двоичных чисел: 000, 001, 010 и дальше до 111.
  3. Разбейте выражение на шаги по приоритету и заведите столбец на каждый шаг: сначала отрицания, потом конъюнкции, потом всё остальное.
  4. Заполните последний столбец, он и есть значение функции.

Для F = (x → y) ∧ (¬z ∨ x) то же самое делают пять строк кода, а похожие упражнения на условия есть в подборке задач по Python для начинающих. Для чисел 0 и 1 сравнение x <= y работает как импликация: ложно оно только при x = 1, y = 0.

from itertools import product

print("x y z F")
for x, y, z in product([0, 1], repeat=3):
    F = (x <= y) and (not z or x)
    print(x, y, z, int(F))

Вывод:

x y z F
0 0 0 1
0 0 1 0
0 1 0 1
0 1 1 0
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 1

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

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

  • Двойное отрицание: ¬¬A = A.
  • Переместительный и сочетательный: A ∨ B = B ∨ A, (A ∧ B) ∧ C = A ∧ (B ∧ C).
  • Распределительный: A ∧ (B ∨ C) = (A ∧ B) ∨ (A ∧ C), и в отличие от обычной арифметики работает в обе стороны: A ∨ (B ∧ C) = (A ∨ B) ∧ (A ∨ C).
  • Законы де Моргана: ¬(A ∧ B) = ¬A ∨ ¬B и ¬(A ∨ B) = ¬A ∧ ¬B. Отрицание, внесённое в скобку, меняет И на ИЛИ и наоборот.
  • Поглощение: A ∨ (A ∧ B) = A, A ∧ (A ∨ B) = A.
  • Импликация через ИЛИ: A → B = ¬A ∨ B.
  • Исключённое третье и противоречие: A ∨ ¬A = 1, A ∧ ¬A = 0.

Де Морган чаще всего нужен в коде. Условие «не (пришёл и оплатил)» удобнее читать как «не пришёл или не оплатил». Так переписывают условия в if и в циклах, например в управляющих конструкциях C.

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

Клавиши с логическими знаками и переключатели

Python

В Python and и or возвращают не True или False, а один из операндов. В документации языка это описано так: x or y сначала вычисляет x, если оно истинно, возвращает его, иначе вычисляет и возвращает y. Этим пользуются для значений по умолчанию:

print(0 or "гость")         # гость
print("Анна" or "гость")    # Анна
print([] and "не дойдёт")   # []

Вторая особенность называется сокращённым вычислением. Если по левой части ответ уже ясен, правая не вычисляется вовсе:

def check(name):
    print("проверяю", name)
    return True

print(check("первое") or check("второе"))
# проверяю первое
# True

Функция check("второе") не вызвалась. Оператор not всегда возвращает именно True или False. Похожая короткая запись условий разобрана в статье о тернарном операторе в Python.

C и JavaScript

Логические операторы в C пишутся как !, &&, ||, а одиночные &, |, ^ работают с отдельными битами числа. Их часто путают, а компилятор даже с флагом -Wall не выдаёт предупреждения:

#include <stdio.h>

int main(void) {
    int a = 4, b = 2;
    printf("%d %d\n", a && b, a & b);   /* 1 0 */
    return 0;
}

Оба числа ненулевые, поэтому a && b истинно. А побитовое 4 & 2 даёт 0: у 100 и 010 нет общих единиц. Остальные знаки C собраны в статье об операторах и выражениях в C.

В JavaScript || ведёт себя как or в Python. По справке MDN, оператор возвращает значение одного из операндов, и вычисление идёт слева направо до первого истинноподобного значения. Поэтому 0 || "гость" вернёт строку «гость».

Excel и Google Таблицы

В таблицах ИЛИ записывают функцией: =ИЛИ(A2>10; B2="да"). Она возвращает ИСТИНА, если выполнено хотя бы одно условие.

По справке Microsoft, условий может быть не больше 255.

ИЛИ вкладывают в ЕСЛИ, чтобы формула выводила свой текст или число вместо ИСТИНА и ЛОЖЬ. Как это делается, показано в инструкции по функции ЕСЛИ в Excel.

SQL

В SQL есть третье значение NULL, то есть «неизвестно». В документации PostgreSQL приведены таблицы для такой логики:

  • NULL OR TRUE = TRUE: одного истинного условия хватает.
  • NULL AND FALSE = FALSE: одного ложного хватает.
  • NULL OR FALSE и NULL AND TRUE дают NULL.

Из-за этого строка с NULL в столбце может выпасть из выборки WHERE без всякой ошибки. Подробнее об этом в статье о NULL в SQL.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Частые ошибки

Сравнение с несколькими значениями через or

Запись x == 1 or 2 читается не как «x равно 1 или 2». Сравнение выполняется первым, и получается (x == 1) or 2. При x = 5 это выражение возвращает 2, то есть истину.

Решение: x == 1 or x == 2 или короче x in (1, 2).

Импликация считается ложной при ложной посылке

При A = 0 импликация A → B истинна при любом B. Ошибку проще всего поймать, сверившись с третьей строкой таблицы: ложь только в случае 1 → 0.

Одиночный амперсанд вместо двойного

В C, Java и JavaScript if (a & b) проверяет общие биты, а не «оба истинны». Для логики нужен &&.

Отрицание без скобок

В Python not a == b означает not (a == b), потому что сравнение выполняется раньше not. Если нужно было «(не a) равно b», ставьте скобки.

Где освоить информатику и программирование системно

С логических операций начинается и школьная информатика, и любой язык программирования. Дальше идут ветвления, циклы, алгоритмы и задачи ЕГЭ посложнее. В каталоге собраны курсы по информатике: подготовка к ЕГЭ и ОГЭ, программирование для школьников и взрослых. Если цель — язык для работы, смотрите курсы по Python.

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Прикладная информатика (Магистратура)
Перейти на сайт курса
Университет СинергияУниверситет Синергия90 000 ₽ - 2 годаОбзор курса
Математика и информатика (Второе высшее)
Перейти на сайт курса
Университет СинергияУниверситет Синергия20 000 ₽ - 4 годаОбзор курса
Профессия Учитель информатики и ИКТ за 6 мес. ФГОС
Перейти на сайт курса
НИУДПО имени К.Д. Ушинского (НИИДПО)НИУДПО (НИИДПО)33 200 ₽2770 ₽/мес.21 неделяОбзор курса
Профессия Учитель математики и информатики за 9 мес.
Перейти на сайт курса
НИУДПО имени К.Д. Ушинского (НИИДПО)НИУДПО (НИИДПО)36 600 ₽3050 ₽/мес.28 недельОбзор курса
Математика и информатика (Бакалавриат)
Перейти на сайт курса
Университет СинергияУниверситет Синергия20 000 ₽ - 4 годаОбзор курса

Больше программ — в полном каталоге курсов по информатике

Часто задаваемые вопросы

Как обозначается ИЛИ в информатике?

В учебниках и на ЕГЭ ИЛИ обозначают знаком ∨ (на клавиатуре \/ или |). В Python его пишут словом or, в C, Java и JavaScript двумя чертами ||, в Excel функцией ИЛИ().

Чем ИЛИ отличается от исключающего ИЛИ?

Обычное ИЛИ истинно, если истинно хотя бы одно условие, в том числе оба сразу. Исключающее ИЛИ (XOR) истинно только когда значения различаются: при двух истинных условиях оно даёт ложь.

Какая логическая операция выполняется первой?

Без скобок порядок такой: инверсия, конъюнкция, дизъюнкция, импликация, тождество. В Python и C порядок трёх основных операций тот же: сначала НЕ, потом И, потом ИЛИ.

Когда импликация ложна?

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

Что возвращает or в Python?

Не обязательно True или False, а один из операндов: первый, если он истинный, иначе второй. Поэтому 0 or "гость" вернёт строку «гость».

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!