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

10 ноября 2026 г.

Вопросы из практики выглядят по-разному, но относятся к одному и тому же: «переведите 303 в четверичную систему», «запишите 243 в 8-битовом виде», «что будет, если перевести 3012 из восьмеричной». Суть одна: число записывается не само по себе, а по правилам конкретной системы счисления, и чтобы поменять систему, нужно разложить число по разрядам и собрать заново.

Дальше разберём, как устроена позиционная запись, как переводить число делением на основание и обратно умножением, как быть с дробной частью и почему октет, байт и 8-битовое число связаны между собой.

Система счисления и позиционный принцип

Система счисления это соглашение о том, как записывать числа и сколько различных цифр в ней допустимо. Десятичная система, в которой мы живём, использует десять цифр: от нуля до девяти. Двоичная использует две: ноль и единицу. Шестнадцатеричная шестнадцать: десять привычных плюс шесть букв от A до F.

Ключевая идея всех позиционных систем в том, что значение каждой цифры зависит от её позиции. В числе 3012 в десятичной системе цифра 3 стоит в тысячах, 0 в сотнях, 1 в десятках и 2 в единицах, и число равно 3 · 1000 + 0 · 100 + 1 · 10 + 2. Меняем основание, меняются веса разрядов, а цифры остаются теми же цифрами.

  • вес разряда это целая степень основания: в десятичной системе это 1, 10, 100, 1000;
  • в двоичной системе веса равны 1, 2, 4, 8, 16, 32;
  • в восьмеричной это 1, 8, 64, 512;
  • в шестнадцатеричной это 1, 16, 256, 4096;
  • число в системе с основанием q записывается как сумма произведений цифр на степени q, и задача перевода сводится к тому, чтобы эти суммы сошлись.

Все системы, кроме, пожалуй, десятичной, нужны не для красоты. Двоичная лежит в основе работы процессоров, восьмеричная удобна для прав доступа в Unix, шестнадцатеричная для байтов, цветов и адресов памяти. Об этом подробнее ниже.

Четыре системы, которые встречаются чаще всего

  • двоичная, основание 2: цифры 0 и 1, веса разрядов 1, 2, 4, 8, 16; пример 11110011₂ = 128 + 64 + 32 + 16 + 2 + 1 = 243;
  • восьмеричная, основание 8: цифры от 0 до 7, веса 1, 8, 64, 512; пример 5704₈ = 5 · 512 + 7 · 64 + 0 · 8 + 4 = 3012;
  • десятичная, основание 10: цифры от 0 до 9, веса 1, 10, 100, 1000; это обычная запись, с которой начинается любой перевод;
  • шестнадцатеричная, основание 16: цифры от 0 до 9 и буквы A, B, C, D, E, F, где F это 15; веса 1, 16, 256, 4096; пример BC4₁₆ = 11 · 256 + 12 · 16 + 4 = 3012.

Буквы в шестнадцатеричной записи выбирают не случайно: A это 10, B это 11, C это 12, D это 13, E это 14, F это 15. Тогда 10 в шестнадцатеричной системе записывается как A, 16 как 10₁₆, а 255 как FF₁₆. Полезно помнить эти значения наизусть, потому что они встречаются чаще, чем кажется: FF это часто «маска всех битов», а 00 и FF это границы диапазона байта. Именно в этой системе записывают цвета: пара цифр на канал, три пары на цвет, а 255 это FF, и об этом подробнее в статье про hex-коды цвета.

Перевод в другую систему: деление на основание

Классический способ перевести целое число из десятичной системы в любую другую: делить на основание целевой системы и записывать остатки. Остатки от деления и есть цифры будущего числа, причём задом наперёд.

  1. разделите число на основание целевой системы и запишите остаток от деления;
  2. частное снова разделите на основание и запишите новый остаток;
  3. повторяйте, пока частное не станет нулём;
  4. прочитайте записанные остатки снизу вверх, и получите искомую запись;
  5. если в процессе появляется остаток больше 9, запишите его буквой по правилам целевой системы.
3012₁₀ в восьмеричную и шестнадцатеричную
Восьмеричная (основание 8):
  3012 ÷ 8 = 376, остаток 4
   376 ÷ 8 =  47, остаток 0
    47 ÷ 8 =   6, остаток 7
     6 ÷ 8 =   0, остаток 6
  читаем снизу вверх: 5704₈

Шестнадцатеричная (основание 16):
  3012 ÷ 16 = 188, остаток 4
   188 ÷ 16 =  11, остаток 12 (C)
    11 ÷ 16 =   0, остаток 11 (B)
  читаем снизу вверх: BC4₁₆

Проверка: 5 · 512 + 7 · 64 + 0 · 8 + 4 = 2560 + 448 + 4 = 3012
Проверка: 11 · 256 + 12 · 16 + 4 = 2816 + 192 + 4 = 3012

Обратите внимание, насколько механичен этот алгоритм: он одинаково работает для любого основания и для любого размера числа. Различается только то, на что вы делите и как записываете остаток больше девяти.

В реальной работе перевод делают за секунды: конвертер систем счисления выдаёт число сразу в двоичной, восьмеричной, десятичной и шестнадцатеричной форме, а во второй вкладке показывает запись в произвольной системе с основанием от 2 до 36. Ограничение у него одно: работает с целыми числами, дробная часть отбрасывается, и для неё нужен ручной алгоритм из раздела ниже.

Обратный перевод: умножением на основание

Вернуть число в десятичную систему можно либо разложив его по разрядам, либо обратным ходом: берём самую левую цифру и последовательно умножаем на основание, прибавляя следующую цифру.

  1. возьмите первую цифру числа как есть;
  2. умножьте её на основание и прибавьте вторую цифру;
  3. снова умножьте результат на основание и прибавьте третью цифру;
  4. повторяйте, пока не обработаете все цифры;
  5. то, что получится в конце, и есть значение числа в десятичной системе.
Возвращаем 5704₈ и BC4₁₆ в десятичную
5704₈:
  5
  5 · 8 + 7 = 47
  47 · 8 + 0 = 376
  376 · 8 + 4 = 3012

BC4₁₆:
  B = 11
  11 · 16 + C(12) = 188
  188 · 16 + 4 = 3012

С другой стороны, разложение по разрядам:
  5704₈ = 5 · 8³ + 7 · 8² + 0 · 8¹ + 4 · 8⁰ = 3012

Второй способ, разложение по разрядам, полезен для проверки: он помогает поймать ошибку в любом разряде. Если при сложении произведений получилось не то число, значит ошибка либо в чтении цифры, либо в весе разряда.

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

Двоичная система особая не формулами, а тем, что любая цифра в ней это ноль или единица. Из этого следует и алгоритм, и привычка читать двоичные числа группами по четыре бита.

243 и 303 в двоичной системе
243 ÷ 2 = 121, остаток 1
121 ÷ 2 =  60, остаток 1
 60 ÷ 2 =  30, остаток 0
 30 ÷ 2 =  15, остаток 0
 15 ÷ 2 =   7, остаток 1
  7 ÷ 2 =   3, остаток 1
  3 ÷ 2 =   1, остаток 1
  1 ÷ 2 =   0, остаток 1
снизу вверх: 11110011₂
проверка: 128 + 64 + 32 + 16 + 2 + 1 = 243

303 в двоичной: 100101111₂
проверка: 256 + 32 + 8 + 4 + 2 + 1 = 303

303 в четверичной (основание 4): 10233₄
проверка: 256 + 0 + 32 + 12 + 3 = 303

Заметьте, что 243 помещается в восемь бит, а 303 уже нет: для него нужно девять разрядов. Это не дефект, а прямое следствие того, что в одном байте помещается 256 различных значений.

Отдельно от записи чисел стоит задача обратная: перевести текст в двоичный код, где каждый символ заменяется восемью битами его кода. Это делает перевод в двоичный код, и о том, как устроен код символа и почему латиница занимает один байт, а кириллица больше, подробнее в материале про двоичный код простыми словами.

Дробная часть: умножение на основание

С целой частью всё понятно, а что делать с дробной? Здесь алгоритм зеркальный: дробную часть умножают на основание, целая часть произведения становится очередной цифрой после запятой, а дробная часть произведения снова умножается.

0,375 в двоичной и шестнадцатеричной системах
Двоичная (умножаем на 2):
  0,375 · 2 = 0,75   → цифра 0
  0,75  · 2 = 1,5    → цифра 1
  0,5   · 2 = 1,0    → цифра 1, дальше ноль
  получаем 0,011₂
  проверка: 0/2 + 1/4 + 1/8 = 0,375

Шестнадцатеричная (умножаем на 16):
  0,375 · 16 = 6,0   → цифра 6
  получаем 0,6₁₆

А вот 0,1 в шестнадцатеричной:
  0,1 · 16 = 1,6   → цифра 1
  0,6 · 16 = 9,6   → цифра 9
  0,6 · 16 = 9,6   → снова 9, и так далее
  получаем 0,19999...₁₆

Столкнувшись с такой бесконечной последовательностью, дописывают последнюю цифру на единицу: 0,19999... = 0,1A₁₆. В двоичной системе то же самое происходит с 0,01111...₂, которое равно 0,1₂. Это довод в пользу того, чтобы десятичную дробь 0,1 не переводили в двоичную вообще: она никогда не станет конечной.

Как связаны системы: октет, байт и разрядность

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

  • один октет это ровно 8 бит, и в двоичной записи это 3 цифры: 111 = 7 в десятичной, то есть 0o7 = 0x7;
  • в шестнадцатеричной записи 8 бит это 2 цифры, потому что 16 = 2⁴, а 8 = 2³;
  • два октета это 16 бит, а это ровно 4 шестнадцатеричные цифры, то есть целый байт пара или DWORD в программировании;
  • один байт это 8 бит, и в нём помещается 256 беззнаковых значений от 0 до 255;
  • со знаком байт хранит значения от −128 до 127, потому что старший бит отдаётся под признак знака.

Именно поэтому в восьмеричной записи каждая цифра это ровно три двоичных бита, а в шестнадцатеричной ровно четыре. Проще всего это увидеть на примере: FF₁₆ = 1111 1111₂, и это полностью заполненный байт из единиц. Значение 255 в десятичной системе, 377 в восьмеричной и FF в шестнадцатеричной это всё одно и то же число.

Восьмеричная система удобна там, где разряды идут по три бита, например в правах доступа Unix: запись 755 разбивается на 7, 5, 5, и каждая тройка это один блок прав. Подробнее про это в материале про права доступа и chmod.

Что значит «8-битовое число»

Фраза «243 в 8-битовом виде» из учебных задач означает, что число надо записать в двоичной системе ровно восемью двоичными разрядами, то есть в одном байте. Разрядов должно быть восемь, ведущие нули при необходимости дописываются, и все они должны помещаться в байт.

  • 243 помещается в байт: 11110011₂, восемь разрядов, всё в порядке;
  • 303 не помещается: в двоичной это 100101111₂, девять разрядов, и в 8-битовом виде число не существует;
  • максимальное беззнаковое 8-битовое значение это 255, то есть 11111111₂;
  • минимальное беззнаковое это 0;
  • если задача требует именно 8-битового представления, а число не влезает, в ответе должен быть явный признак переполнения.

Типичные ошибки

  • остатки записаны в том же порядке, в каком получились, а не снизу вверх, и число вышло перевёрнутым;
  • остаток 10, 11 и выше записан цифрой, хотя в десятичной системе таких цифр нет, и в шестнадцатеричной это A, B, C;
  • шестнадцатеричные цифры перепутаны местами: A это 10, а не 1, и B это 11, а не 2;
  • в формуле площади или объёма перепутали основание системы с основанием геометрической фигуры, а это шутливое совпадение обозначений иногда сбивает с толку;
  • диаметр принят за радиус, а это ошибка не в системе счисления, а в формуле, и в двоичной записи она заметна сильнее;
  • дробная часть переведена делением вместо умножения, и получился бесконечный хвост цифр;
  • проверка не сделана: сложив разряды обратно, можно сразу увидеть расхождение.

Почти все эти ошибки ловятся одним приёмом: после перевода верните число обратно и сравните с исходным. Или разложите результат по разрядам и сложите произведения вручную. Пять секунд работы, и никаких сюрпризов.

Частые вопросы

Зачем нужны четыре системы, если есть десятичная?

Десятичная удобна человеку, а машине удобнее те, что ближе к её устройству. Процессор оперирует битами, поэтому двоичная родная. Восьмеричная группирует биты по три, шестнадцатеричная по четыре, и в такой записи байты и машинные слова видны глазом без пересчёта. Один и тот же байт 0xF0 это 1111 0000 в двоичной, 0360 в восьмеричной и 240 в десятичной.

Чем шестнадцатеричная отличается от шестидесятеричной?

Только числом цифр и набором весов разрядов. Шестидесятеричная система использовалась в Вавилоне и в делении часа на минуты и секунды, в ней 60 цифр от 0 до 59. Но в вычислениях она неудобна: чтобы закодировать один байт, нужно две цифры, тогда как в шестнадцатеричной хватает одной.

Как перевести очень большое число, например 2³²?

Тем же делением на основание, но выполнять его нужно 32 раза для двоичной записи. На практике такие числа вручную не считают: 2³² это ровно 4 294 967 296 в десятичной и 0x100000000 в шестнадцатеричной, а двоичная запись состоит из единицы и 32 нулей. Рядом с этим существуют калькуляторы, которые делают перевод мгновенно, и для ручной работы они удобны как проверка.

Почему в двоичной системе нет цифр больше единицы?

Потому что система счисления определяется числом возможных состояний одного элемента. Электронная схема имеет два устойчивых состояния, провод либо проводит ток, либо нет, и кодировать больше чем два состояния в одном разряде физически нечем. В двоичной системе каждый разряд это один бит, и 8 бит дают 2⁸ = 256 комбинаций.

Как записать отрицательное число в двоичной системе?

В дополнительном коде: инвертируются все биты и к результату прибавляется единица. Для 8-битного представления число −1 это 11111111₂, а −2 это 11111110₂, и для 127 это 01111111, для 128 это 10000000. Из-за этого диапазон со знаком несимметричен: 255 в беззнаковом виде это 0, а в знаковом −1.

Можно ли складывать в шестнадцатеричной системе напрямую?

Да, по тем же правилам, что в десятичной, только перенос происходит не на десять, а на шестнадцать. Сложение F + 1 даёт 10₁₆, потому что 15 + 1 = 16. Это тот же приём, по которому в двоичной системе 1 + 1 = 10, а 111 + 1 = 1000. Работают и вычитание, и умножение столбиком, но в повседневной работе проще перевести в десятичную.

Держите под рукой таблицу весов разрядов: для двоичной это 1, 2, 4, 8, 16, 32, 64, 128, 256, для восьмеричной 1, 8, 64, 512, для шестнадцатеричной 1, 16, 256, 4096. Тогда проверка перевода делается в уме: разложите результат по разрядам и сложите. И запомните, что один октет равен трём двоичным цифрам, а один байт равен двум шестнадцатеричным, это снимает половину вопросов про разрядность.

Читайте также