Двоичная система и числа
Двоичная система — это запись чисел с основанием 2: используются только цифры 0 и 1.
В электронике это удобно, потому что физически “0/1” легко представить как два устойчивых состояния: низкий/высокий уровень, выключено/включено.
🎓 В курсе nand2cpuПодробно с практикой: Урок 2: Двоичная система
Бит и байт
- Бит — один разряд (0 или 1).
- Байт — 8 бит.
Если есть \(n\) бит, то число различных комбинаций: \(2^n\).
| Биты | Комбинаций | Диапазон | Где встречается |
|---|---|---|---|
| 1 | 2 | 0–1 | Один вход/выход |
| 4 | 16 | 0–15 | Полубайт (nibble), hex-цифра |
| 8 | 256 | 0–255 | Байт, АЦП 8 бит, RGB-канал |
| 10 | 1024 | 0–1023 | АЦП Arduino (analogRead) |
| 16 | 65536 | 0–65535 | Адреса, таймеры 16 бит |
Как перевести двоичное число в десятичное
Правило: каждый разряд — это степень двойки.
\[ 10110_2 = 1\cdot 2^4 + 0\cdot 2^3 + 1\cdot 2^2 + 1\cdot 2^1 + 0\cdot 2^0 = 16+4+2 = 22_{10} \]Шпаргалка степеней двойки:
| \(2^0\) | \(2^1\) | \(2^2\) | \(2^3\) | \(2^4\) | \(2^5\) | \(2^6\) | \(2^7\) |
|---|---|---|---|---|---|---|---|
| 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 |
Как перевести десятичное число в двоичное
Простой способ: делить на 2 и выписывать остатки.
13 / 2 = 6, остаток 1 ↑
6 / 2 = 3, остаток 0 │ читаем
3 / 2 = 1, остаток 1 │ снизу
1 / 2 = 0, остаток 1 │ вверх
Результат: 1101₂
Шестнадцатеричная система (hex)
Часто используется как «компактная запись» двоичных чисел (4 бита = 1 hex-цифра):
| Hex | Bin | Dec | Hex | Bin | Dec | |
|---|---|---|---|---|---|---|
| 0 | 0000 | 0 | 8 | 1000 | 8 | |
| 1 | 0001 | 1 | 9 | 1001 | 9 | |
| 2 | 0010 | 2 | A | 1010 | 10 | |
| 3 | 0011 | 3 | B | 1011 | 11 | |
| 4 | 0100 | 4 | C | 1100 | 12 | |
| 5 | 0101 | 5 | D | 1101 | 13 | |
| 6 | 0110 | 6 | E | 1110 | 14 | |
| 7 | 0111 | 7 | F | 1111 | 15 |
Пример: 0xFF = 11111111₂ = 255
Где это нужно в робототехнике
| Ситуация | Пример |
|---|---|
| АЦП | analogRead() возвращает 0–1023 (10 бит) |
| Регистры | PORTB = 0b00001111 — включить пины 0-3 |
| RGB-цвет | #FF8000 — красный=255, зелёный=128, синий=0 |
| Адреса I²C | 0x68 = 104 — адрес MPU6050 |
| Битовые флаги | status & 0b00000100 — проверить бит 2 |
Связь с другими темами
- Булева алгебра — операции над битами (AND, OR, XOR): boolean_algebra
- Сумматоры — как складывать двоичные числа в схемах: Акт II nand2cpu
- Счётчики — двоичный счёт от 0000 до 1111: counters
Мини‑задания
Сколько значений может хранить число в 10 битах?
Переведите \(100101_2\) в десятичное.
Переведите 37 в двоичную.
Чему равен
0xA5в двоичной и десятичной системах?АЦП показал 512 из 1023. Какое это напряжение, если опорное 3.3 В?
Details
\(2^{10}=1024\) значений (0…1023).
\(100101_2 = 32+4+1=37\).
37 = 32 + 4 + 1 → \(100101_2\).
0xA5=10100101₂= 165\(U = 3.3 \cdot \frac{512}{1023} \approx 1.65\) В (половина диапазона)
