Булева алгебра
Булева алгебра — это математика логики, где переменные принимают только два значения: 0/1 (ложь/истина).
В робототехнике она нужна, чтобы понятно формулировать условия:
- в коде (
if), - в схемах (логические микросхемы),
- в правилах безопасности (“если авария — выключить”).
🎓 В курсе nand2cpuПодробно с практикой: Урок 3: Логические операции
Базовые операции
| Операция | Символ | Код | Смысл |
|---|---|---|---|
| NOT (НЕ) | \(\lnot A\), \(\overline{A}\) | !A | Инверсия |
| AND (И) | \(A \land B\) | A && B | Истина, если все истинны |
| OR (ИЛИ) | \(A \lor B\) | A || B | Истина, если хотя бы один |
| XOR (искл. ИЛИ) | \(A \oplus B\) | A ^ B | Истина, если ровно один |
Таблицы истинности
NOT (инверсия)
| A | NOT A |
|---|---|
| 0 | 1 |
| 1 | 0 |
AND, OR, XOR
| A | B | A AND B | A OR B | A XOR B |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
Мнемоника:
- AND — «умножение»: \(1 \land 1 = 1\), иначе 0
- OR — «максимум»: \(0 \lor 0 = 0\), иначе 1
- XOR — «разные?»: разные входы → 1
NAND и NOR — универсальные вентили
| A | B | A NAND B | A NOR B |
|---|---|---|---|
| 0 | 0 | 1 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 |
NAND = NOT(AND), NOR = NOT(OR)
💡 Почему NAND особенный?Из NAND можно построить любую логическую функцию! Это основа курса «От NAND до CPU».
Ключевые законы (шпаргалка)
| Закон | Формула | Пример |
|---|---|---|
| Тождество | \(A \land 1 = A\) | Вход без изменений |
| Нуль | \(A \land 0 = 0\) | «Выключатель» |
| Единица | \(A \lor 1 = 1\) | Всегда включено |
| Идемпотентность | \(A \land A = A\) | Дублирование не меняет |
| Инверсия | \(\lnot(\lnot A) = A\) | Двойное отрицание |
| Де Морган | \(\lnot(A \land B) = \lnot A \lor \lnot B\) | «Переворот» условия |
Де Морган на практике
Когда вы «переворачиваете» условие:
НЕ (A И B) = (НЕ A) ИЛИ (НЕ B)
НЕ (A ИЛИ B) = (НЕ A) И (НЕ B)
Пример в коде:
// Эти условия эквивалентны:
if (!(a && b)) { ... }
if (apt list --installed | grep -E "gz-|ignition" || !b) { ... }
Практические примеры
Пример 1: Разрешение мотора
A = концевик нажат
B = старт разрешён
E = авария
Мотор включить: Y = B AND (NOT A) AND (NOT E)
Читается: старт разрешён И концевик НЕ нажат И аварии НЕТ.
Пример 2: Сигнализация
D = дверь открыта
W = окно открыто
M = движение
Тревога: Y = D OR W OR M
Любое из условий → тревога.
Пример 3: XOR для сравнения
A XOR B = 0 → A и B одинаковы
A XOR B = 1 → A и B разные
Используется в компараторе.
Связь с другими темами
- Двоичные числа — биты, с которыми работают операции: binary_numbers
- Логические элементы — как реализовать в схемах: logic_gates
- NAND как универсальный вентиль — весь курс: nand2cpu
- Битовые операции в коде — маски, флаги, регистры
Мини‑задания
Чему равно \(\lnot A\) для A=0 и для A=1?
Для A=1, B=0 посчитайте: \(A \land B\), \(A \lor B\), \(A \oplus B\).
Упростите: \(\lnot(\lnot A)\).
Примените де Морган: \(\lnot(A \lor B) = ?\)
Составьте выражение: «LED горит, если кнопка1 ИЛИ кнопка2 нажата, НО НЕ обе сразу».
Details
A=0 → \(\lnot A=1\), A=1 → \(\lnot A=0\).
\(A \land B = 0\), \(A \lor B = 1\), \(A \oplus B = 1\).
\(\lnot(\lnot A) = A\).
\(\lnot(A \lor B) = \lnot A \land \lnot B\).
\(Y = A \oplus B\) (XOR — «ровно одна кнопка»).
