Skip to main content

Двоичная система и числа

Двоичная система — это запись чисел с основанием 2: используются только цифры 0 и 1.

В электронике это удобно, потому что физически “0/1” легко представить как два устойчивых состояния: низкий/высокий уровень, выключено/включено.

🎓 В курсе nand2cpu
Подробно с практикой: Урок 2: Двоичная система

Бит и байт

  • Бит — один разряд (0 или 1).
  • Байт — 8 бит.

Если есть \(n\) бит, то число различных комбинаций: \(2^n\).

БитыКомбинацийДиапазонГде встречается
120–1Один вход/выход
4160–15Полубайт (nibble), hex-цифра
82560–255Байт, АЦП 8 бит, RGB-канал
1010240–1023АЦП Arduino (analogRead)
16655360–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\)
1248163264128

Как перевести десятичное число в двоичное

Простой способ: делить на 2 и выписывать остатки.

13 / 2 = 6, остаток 1  ↑
 6 / 2 = 3, остаток 0  │ читаем
 3 / 2 = 1, остаток 1  │ снизу
 1 / 2 = 0, остаток 1  │ вверх
                       
Результат: 1101₂

Шестнадцатеричная система (hex)

Часто используется как «компактная запись» двоичных чисел (4 бита = 1 hex-цифра):

HexBinDecHexBinDec
000000810008
100011910019
200102A101010
300113B101111
401004C110012
501015D110113
601106E111014
701117F111115

Пример: 0xFF = 11111111₂ = 255

Где это нужно в робототехнике

СитуацияПример
АЦПanalogRead() возвращает 0–1023 (10 бит)
РегистрыPORTB = 0b00001111 — включить пины 0-3
RGB-цвет#FF8000 — красный=255, зелёный=128, синий=0
Адреса I²C0x68 = 104 — адрес MPU6050
Битовые флагиstatus & 0b00000100 — проверить бит 2

Связь с другими темами

  • Булева алгебра — операции над битами (AND, OR, XOR): boolean_algebra
  • Сумматоры — как складывать двоичные числа в схемах: Акт II nand2cpu
  • Счётчики — двоичный счёт от 0000 до 1111: counters

Мини‑задания

  1. Сколько значений может хранить число в 10 битах?

  2. Переведите \(100101_2\) в десятичное.

  3. Переведите 37 в двоичную.

  4. Чему равен 0xA5 в двоичной и десятичной системах?

  5. АЦП показал 512 из 1023. Какое это напряжение, если опорное 3.3 В?

Details
  1. \(2^{10}=1024\) значений (0…1023).

  2. \(100101_2 = 32+4+1=37\).

  3. 37 = 32 + 4 + 1 → \(100101_2\).

  4. 0xA5 = 10100101₂ = 165

  5. \(U = 3.3 \cdot \frac{512}{1023} \approx 1.65\) В (половина диапазона)