Как переводить числа между системами счисления — informatik-m.ru

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

Python 3.13, правила не меняютсяОпубликовано 13 августа 2024Обновлено 31 марта 20267 мин чтения
Две сцепленные шестерни с циферблатом и рукояткой на плите
← Сначала разберитесь, как это работаетСистемы счисления: что это, какие бывают и чем отличаются
Коротко
  • Из десятичной в другую систему переводят делением на основание, записывая остатки снизу вверх.
  • Из другой системы в десятичную — суммой цифр, умноженных на степени основания.
  • Между двоичной и шестнадцатеричной переводят без вычислений: одна цифра 16-ричной равна четырём битам.
  • Любой ответ легко проверить в Python функциями bin(), hex() и int(x, основание).
Содержание8 разделов ▾
  1. Что нужно знать заранее
  2. Из десятичной системы в любую
  3. Шаг 1. Делите на основание
  4. Шаг 2. Выпишите остатки в обратном порядке
  5. Пример 1. 156 из десятичной в двоичную
  6. Пример 2. 700 из десятичной в шестнадцатеричную
  7. Из любой системы в десятичную
  8. Пример 3. 101101 из двоичной в десятичную
  9. Между двоичной, восьмеричной и шестнадцатеричной
  10. Пример 4. 3AF из шестнадцатеричной в двоичную
  11. Проверка в Python
  12. Условия и ограничения
  13. Частые ошибки
  14. Короткий вывод

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

Все четыре примера с решением проверены запуском Python 3.13, вывод программы приведён в статье. Правила функций bin(), hex() и int() сверены с документацией Python, а состав школьных заданий — с материалами ФИПИ (ссылки в источниках). Компьютеру удобна двоичная запись, человеку — десятичная; восьмеричная и шестнадцатеричная нужны как компактная запись двоичных чисел: в них пишут цвета, адреса памяти, коды символов.

Что нужно знать заранее

Позиционная система счисления определяется основанием — количеством используемых цифр. В десятичной их 10 (0–9), в двоичной 2 (0 и 1), в восьмеричной 8 (0–7), в шестнадцатеричной 16: цифры 0–9 и буквы A–F со значениями 10–15.

Значение числа — сумма цифр, умноженных на основание в степени позиции (позиции считают справа налево, начиная с нуля):

Ap=an−1pn−1+⋯+a1p+a0A_p = a_{n-1} p^{n-1} + \dots + a_1 p + a_0

Здесь pp — основание, aia_i — цифры. Чтобы не перепутать системы, основание пишут внизу справа: 1012101_2 — это двоичное число, а 10110101_{10} — сто один.

Степени двойки пригодятся почти в каждом переводе, запомните их до 256:

Степень202^0212^1222^2232^3242^4252^5262^6272^7282^8
Значение1248163264128256

Из десятичной системы в любую

Шаг 1. Делите на основание

Делите число на основание целевой системы, остаток записывайте. Затем делите на основание частное, и так до тех пор, пока частное не станет нулём.

Шаг 2. Выпишите остатки в обратном порядке

Первый остаток — младшая цифра результата, последний — старшая. Читать остатки нужно снизу вверх.

Пример 1. 156 из десятичной в двоичную

ДелениеЧастноеОстаток
156 : 2780
78 : 2390
39 : 2191
19 : 291
9 : 241
4 : 220
2 : 210
1 : 201

Читаем остатки снизу вверх: 15610=100111002156_{10} = 10011100_2.

Пример 2. 700 из десятичной в шестнадцатеричную

ДелениеЧастноеОстаток
700 : 164312 (C)
43 : 16211 (B)
2 : 1602

Остатки снизу вверх: 2, B, C. Итог: 70010=2BC16700_{10} = 2BC_{16}.

Из любой системы в десятичную

Умножьте каждую цифру на основание в степени её позиции и сложите.

Пример 3. 101101 из двоичной в десятичную

Позиции справа налево: 0, 1, 2, 3, 4, 5.

1011012=1⋅25+0⋅24+1⋅23+1⋅22+0⋅21+1⋅20=32+0+8+4+0+1=45101101_2 = 1\cdot 2^5 + 0\cdot 2^4 + 1\cdot 2^3 + 1\cdot 2^2 + 0\cdot 2^1 + 1\cdot 2^0 = 32 + 0 + 8 + 4 + 0 + 1 = 45

Тот же приём работает для любой системы. Проверим на шестнадцатеричном числе из примера 2:

2BC16=2⋅162+11⋅16+12=512+176+12=7002BC_{16} = 2\cdot 16^2 + 11\cdot 16 + 12 = 512 + 176 + 12 = 700

Получили исходные 700, значит, перевод туда и обратно сходится.

Между двоичной, восьмеричной и шестнадцатеричной

Эти три системы связаны степенями двойки: 8=238 = 2^3, 16=2416 = 2^4. Поэтому делить и складывать не нужно. Достаточно разбить двоичную запись на группы: по три бита для восьмеричной, по четыре для шестнадцатеричной. Группы идут справа налево, неполную слева дополняют нулями.

HexBinHexBin
0000081000
1000191001
20010A1010
30011B1011
40100C1100
50101D1101
60110E1110
70111F1111

Пример 4. 3AF из шестнадцатеричной в двоичную

Заменяем каждую цифру четвёркой бит: 3 → 0011, A → 1010, F → 1111. Склеиваем: 3AF16=00111010111123AF_{16} = 001110101111_2. Ведущие нули можно отбросить: 111010111121110101111_2.

Обратный перевод — тот же приём наоборот. Двоичное число 11101011111110101111 разбиваем справа по четыре: 11 1010 1111, левую группу дополняем нулями: 0011 1010 1111, заменяем на 3, A, F.

Проверка в Python

Ручной перевод легко проверить. В Python есть готовые функции:

Python
print(bin(156))                 # десятичное -> двоичное
print(int('101101', 2))         # двоичное -> десятичное
print(hex(700))                 # десятичное -> шестнадцатеричное
print(format(int('3AF', 16), '012b'))   # шестнадцатеричное -> двоичное, 12 знаков

Вывод программы:

Текст
0b10011100
45
0x2bc
001110101111

Префиксы 0b и 0x — часть записи Python: так язык отличает двоичные и шестнадцатеричные числа от десятичных. Все четыре результата совпадают с примерами выше. Функция int(строка, основание) принимает основание от 2 до 36, а format(число, 'b') и format(число, 'X') дают запись без префикса.

А вот как тот же алгоритм деления с остатками выглядит кодом:

Python
def to_base(n, b):
    digits = '0123456789ABCDEF'
    result = ''
    while n > 0:
        result = digits[n % b] + result   # остаток становится старшей цифрой
        n //= b
    return result

print(to_base(156, 2))
print(to_base(700, 16))
Текст
10011100
2BC

Условия и ограничения

Данные
Только целые неотрицательные числа — В примерах выше разобраны именно они. Дробные числа и отрицательные числа переводятся иначе (ответы на два вопроса — в блоке «Частые вопросы»).
Синтаксис
Основание в int — основание у int(строка, основание) — от 2 до 36. Это следует из документации Python: цифры 10–35 записываются буквами a–z или A–Z, регистр не важен. Значение 0 для основания означает «определить по префиксу».
Синтаксис
Префиксы чисел — префиксы. bin() возвращает строку с префиксом 0b, hex() — с 0x; для восьмеричной системы префикс 0o. Это синтаксис Python, в школьной записи вместо префикса пишут основание в индексе.
Системы
Группировка битов — группировка по 3 и 4 бита работает только между двоичной и восьмеричной или шестнадцатеричной системами, потому что 8=238 = 2^3 и 16=2416 = 2^4. Для перевода между восьмеричной и шестнадцатеричной проще пройти через двоичную.
Версия
Версия Python — версия. Вывод кода получен на Python 3.13.

Частые ошибки

  • Читают остатки сверху вниз, а не снизу вверх. Для 156 получится 00111001 вместо 10011100.
  • Путают основание и показатель степени: в 252^5 основание 2, а показатель 5.
  • Забывают дополнить крайнюю левую группу нулями при переводе в шестнадцатеричную систему.
  • Принимают 0x2bc за какое-то другое число: это обычная запись шестнадцатеричного числа, в Python регистр букв не важен.
  • Не проверяют результат обратным переводом, а он занимает полминуты.

Короткий вывод

Из десятичной системы переводят делением на основание, в десятичную — суммой степеней. Между двоичной и шестнадцатеричной вычисления не нужны: достаточно таблицы из шестнадцати строк. Любой свой ответ можно проверить одной строкой в Python.

Источники

  1. Python Documentation: Built-in Functions — bin(), hex(), int()↗ docs.python.org
  2. Python Documentation: Format Specification Mini-Language↗ docs.python.org
  3. Python Documentation: Lexical analysis — Integer literals↗ docs.python.org
  4. ФИПИ: Навигатор самостоятельной подготовки к ЕГЭ-2026, информатика (теория)↗ doc.fipi.ru

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

Как перевести из двоичной в десятичную?

Умножьте каждую двоичную цифру на 2 в степени её позиции и сложите результаты. Позиции считают справа налево, начиная с нуля. Например, 1101 в двоичной записи — это 1·8 + 1·4 + 0·2 + 1·1 = 13. Результат легко проверить в Python командой int('1101', 2): она вернёт 13.

Как перевести число в шестнадцатеричную систему?

Делите число на 16 и записывайте остатки, пока частное не станет нулём; остатки 10–15 пишите буквами A–F, а читайте снизу вверх. Например, 255: 255 : 16 = 15, остаток 15 (F), затем 15 : 16 = 0, остаток 15 (F), итог FF. Если число уже записано в двоичной системе, группируйте цифры по четыре.

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

В математической записи достаточно поставить минус перед двоичным числом: −5 это −101. Python делает так же: bin(-5) вернёт '-0b101'. В памяти компьютера отрицательные числа хранятся иначе, в особом коде, но для школьных задач и для записи числа обычно хватает знака минус.

Какие задания на системы счисления есть в ЕГЭ по информатике?

В навигаторе ФИПИ по подготовке к ЕГЭ-2026 знание позиционных систем счисления проверяется заданием 14 (код проверяемого элемента 2.3). В материалах ФИПИ указаны правила перевода целых и дробных чисел из десятичной записи в систему с данным основанием. Эта статья разбирает такие переводы для целых чисел на примерах с решением.

Можно ли перевести в другую систему число с запятой?

Да, но дробная часть переводится отдельно: целую часть делят на основание, а дробную последовательно умножают на основание, записывая целые части результата. Например, 0,625 в двоичной системе: 0,625·2 = 1,25 (цифра 1), 0,25·2 = 0,5 (цифра 0), 0,5·2 = 1,0 (цифра 1), итог 0,101. Правила для дробных чисел входят в перечень ФИПИ.

РедакцияМатериал подготовлен по источникам выше · 31 марта 2026