Двоичная запись из главы 01 честная, но неудобная для человека — слишком длинная и легко сбиться со счётом нулей. Восьмеричная и особенно шестнадцатеричная системы — не другая математика, а просто более компактная запись тех же самых битов.
Число 5 из главы 01 в двоичном виде — 00000101, уже восемь символов ради одной простой цифры. Число покрупнее выглядело бы ещё длиннее и совсем нечитаемо. Восьмеричная и шестнадцатеричная системы решают эту проблему изящно: они выбраны так, что каждая их цифра соответствует ровно фиксированной группе битов — переключение между записями превращается в простую группировку, а не в вычисление.
Восьмеричная система (основание 8) использует цифры от 0 до 7. Три бита дают ровно 8 комбинаций (2³ = 8) — значит, каждая восьмеричная цифра точно соответствует трём битам, без остатка. Сегодня восьмеричная система используется реже шестнадцатеричной, но у неё есть заметное практическое применение, с которым ты столкнёшься в главе 09 про терминал:
Права доступа к файлу в macOS/Linux традиционно записываются тремя восьмеричными
цифрами — для владельца, группы и остальных пользователей. Каждая цифра — сумма трёх
битовых флагов: чтение (4), запись (2), выполнение (1). Например, "755" означает: владельцу
— 7 (4+2+1 = чтение+запись+выполнение), группе и остальным — 5 (4+1 = чтение+выполнение,
без записи). Команда вида chmod 755 файл — это восьмеричная система счисления,
использованная не как абстракция из учебника, а как реальный повседневный синтаксис.
Шестнадцатеричная система (основание 16, hex) — самая распространённая компактная запись в современном программировании. Использует 16 знаков: цифры 0–9, а для значений 10–15 — буквы A, B, C, D, E, F. Четыре бита дают ровно 16 комбинаций (2⁴ = 16) — один полубайт (nibble) точно соответствует одной шестнадцатеричной цифре.
Один байт — это ровно 8 бит — то есть ровно два полубайта. Значит, один байт всегда точно и без остатка записывается ровно двумя шестнадцатеричными цифрами: например, байт 11111111 — это FF в hex, что равно 255 в десятичной системе. Восьмеричная запись байта на такое ровное деление не ложится (8 бит не делится нацело на группы по 3), что делает hex гораздо удобнее именно для современных байт-ориентированных вычислений — отсюда её повсеместное использование сегодня при том, что восьмеричная осталась в основном в исторических нишах вроде прав доступа Unix.
| Десятичное | Двоичное | Шестнадцатеричное |
|---|---|---|
| 0 | 0000 | 0 |
| 1 | 0001 | 1 |
| 2 | 0010 | 2 |
| 7 | 0111 | 7 |
| 10 | 1010 | A |
| 15 | 1111 | F |
| 255 | 11111111 | FF |
Веб-цвет вида #FF5733 — это ровно три байта подряд в hex-записи: FF (красный
канал, 255 — максимум), 57 (зелёный, 87 в десятичной), 33 (синий, 51 в десятичной). Каждая
пара шестнадцатеричных символов — это независимый байт интенсивности одного цветового
канала от 0 до 255 — прямое практическое применение того, что один байт = два hex-символа.
Раздели двоичное число на группы по 4 бита справа налево, переведи каждую группу в один hex-символ по таблице выше и запиши подряд. Например: 10110110 → разбиваем на 1011 и 0110 → это B и 6 → результат: B6. Не нужно ничего вычислять через десятичную систему посередине — группировка работает напрямую именно потому, что 4 бита и есть одна hex-цифра.
В большинстве языков программирования, включая Python (блок 3 этой книги), есть
стандартные префиксы для записи чисел не в десятичной системе прямо в коде:
0x перед шестнадцатеричным числом (например, 0xFF),
0o перед восьмеричным (0o755), 0b перед двоичным
(0b1010). Все они означают одно и то же число, записанное в разных системах —
компьютер внутри всё равно хранит его как обычные биты, разница только в удобстве записи
для человека, читающего код.
Пока речь шла только о числах. Следующая глава — как из этих же самых нулей и единиц получается текст: буквы, знаки препинания, эмодзи — тема кодировок, от старого ASCII до современного Unicode.
Книга бесплатна для чтения. Автор — Тариел Бежанидзе, компьютерный мастер в Батуми · tariel.ge · все бесплатные книги. Копировать текст целиком на другие сайты — только со ссылкой на источник.