tariel.ge › Полезное: бесплатные книги › Программирование: от нулей и единиц до PythonБесплатно · автор Тариел Бежанидзе
← Учебник по программированию ЛИСТ 02БЛОК 0 — КАК УСТРОЕН КОМПЬЮТЕРРЕВ. 1
Глава 02 · Как устроен компьютер изнутри

Системы счисления: двоичная, восьмеричная, шестнадцатеричная

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

Почему вообще нужна "другая" запись тех же чисел

Число 5 из главы 01 в двоичном виде — 00000101, уже восемь символов ради одной простой цифры. Число покрупнее выглядело бы ещё длиннее и совсем нечитаемо. Восьмеричная и шестнадцатеричная системы решают эту проблему изящно: они выбраны так, что каждая их цифра соответствует ровно фиксированной группе битов — переключение между записями превращается в простую группировку, а не в вычисление.

Восьмеричная система — по три бита на цифру

Восьмеричная система (основание 8) использует цифры от 0 до 7. Три бита дают ровно 8 комбинаций (2³ = 8) — значит, каждая восьмеричная цифра точно соответствует трём битам, без остатка. Сегодня восьмеричная система используется реже шестнадцатеричной, но у неё есть заметное практическое применение, с которым ты столкнёшься в главе 09 про терминал:

Права доступа к файлам в Unix-системах (chmod)

Права доступа к файлу в 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) точно соответствует одной шестнадцатеричной цифре.

Почему именно hex обошла восьмеричную по популярности

Один байт — это ровно 8 бит — то есть ровно два полубайта. Значит, один байт всегда точно и без остатка записывается ровно двумя шестнадцатеричными цифрами: например, байт 11111111 — это FF в hex, что равно 255 в десятичной системе. Восьмеричная запись байта на такое ровное деление не ложится (8 бит не делится нацело на группы по 3), что делает hex гораздо удобнее именно для современных байт-ориентированных вычислений — отсюда её повсеместное использование сегодня при том, что восьмеричная осталась в основном в исторических нишах вроде прав доступа Unix.

Таблица соответствия для быстрого чтения

ДесятичноеДвоичноеШестнадцатеричное
000000
100011
200102
701117
101010A
151111F
25511111111FF

Практика: цвета в вебе

Веб-цвет вида #FF5733 — это ровно три байта подряд в hex-записи: FF (красный канал, 255 — максимум), 57 (зелёный, 87 в десятичной), 33 (синий, 51 в десятичной). Каждая пара шестнадцатеричных символов — это независимый байт интенсивности одного цветового канала от 0 до 255 — прямое практическое применение того, что один байт = два hex-символа.

Как быстро переводить двоичное число в hex — группировкой, а не вычислением

Практический приём

Раздели двоичное число на группы по 4 бита справа налево, переведи каждую группу в один hex-символ по таблице выше и запиши подряд. Например: 10110110 → разбиваем на 1011 и 0110 → это B и 6 → результат: B6. Не нужно ничего вычислять через десятичную систему посередине — группировка работает напрямую именно потому, что 4 бита и есть одна hex-цифра.

Как эти системы записываются в коде

В большинстве языков программирования, включая Python (блок 3 этой книги), есть стандартные префиксы для записи чисел не в десятичной системе прямо в коде: 0x перед шестнадцатеричным числом (например, 0xFF), 0o перед восьмеричным (0o755), 0b перед двоичным (0b1010). Все они означают одно и то же число, записанное в разных системах — компьютер внутри всё равно хранит его как обычные биты, разница только в удобстве записи для человека, читающего код.

Что дальше

Пока речь шла только о числах. Следующая глава — как из этих же самых нулей и единиц получается текст: буквы, знаки препинания, эмодзи — тема кодировок, от старого ASCII до современного Unicode.

Глава02 — Системы счисления
Блок0 — Как устроен компьютер
Далее03 — Кодировки
СтатусГотово · рев. 1
Предыдущая глава ← 01 · Биты и байты Следующая глава 03 · Кодировки →

Книга бесплатна для чтения. Автор — Тариел Бежанидзе, компьютерный мастер в Батуми · tariel.ge · все бесплатные книги. Копировать текст целиком на другие сайты — только со ссылкой на источник.