- Из десятичной в другую систему переводят делением на основание, записывая остатки снизу вверх.
- Из другой системы в десятичную — суммой цифр, умноженных на степени основания.
- Между двоичной и шестнадцатеричной переводят без вычислений: одна цифра 16-ричной равна четырём битам.
- Любой ответ легко проверить в Python функциями bin(), hex() и int(x, основание).
Содержание8 разделов ▾
- Что нужно знать заранее
- Из десятичной системы в любую
- Шаг 1. Делите на основание
- Шаг 2. Выпишите остатки в обратном порядке
- Пример 1. 156 из десятичной в двоичную
- Пример 2. 700 из десятичной в шестнадцатеричную
- Из любой системы в десятичную
- Пример 3. 101101 из двоичной в десятичную
- Между двоичной, восьмеричной и шестнадцатеричной
- Пример 4. 3AF из шестнадцатеричной в двоичную
- Проверка в Python
- Условия и ограничения
- Частые ошибки
- Короткий вывод
Перевод числа из одной системы счисления в другую — это запись того же числа другим набором цифр. Из десятичной системы переводят делением на основание с остатками, в десятичную — суммой цифр, умноженных на степени основания. Инструкция для школьников и начинающих: вы научитесь вручную переводить целые числа между десятичной, двоичной, восьмеричной и шестнадцатеричной системами и проверять ответ программой.
Все четыре примера с решением проверены запуском Python 3.13, вывод программы приведён в статье. Правила функций bin(), hex() и int() сверены с документацией Python, а состав школьных заданий — с материалами ФИПИ (ссылки в источниках). Компьютеру удобна двоичная запись, человеку — десятичная; восьмеричная и шестнадцатеричная нужны как компактная запись двоичных чисел: в них пишут цвета, адреса памяти, коды символов.
Что нужно знать заранее
Позиционная система счисления определяется основанием — количеством используемых цифр. В десятичной их 10 (0–9), в двоичной 2 (0 и 1), в восьмеричной 8 (0–7), в шестнадцатеричной 16: цифры 0–9 и буквы A–F со значениями 10–15.
Значение числа — сумма цифр, умноженных на основание в степени позиции (позиции считают справа налево, начиная с нуля):
Здесь — основание, — цифры. Чтобы не перепутать системы, основание пишут внизу справа: — это двоичное число, а — сто один.
Степени двойки пригодятся почти в каждом переводе, запомните их до 256:
| Степень | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| Значение | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 |
Из десятичной системы в любую
Шаг 1. Делите на основание
Делите число на основание целевой системы, остаток записывайте. Затем делите на основание частное, и так до тех пор, пока частное не станет нулём.
Шаг 2. Выпишите остатки в обратном порядке
Первый остаток — младшая цифра результата, последний — старшая. Читать остатки нужно снизу вверх.
Пример 1. 156 из десятичной в двоичную
| Деление | Частное | Остаток |
|---|---|---|
| 156 : 2 | 78 | 0 |
| 78 : 2 | 39 | 0 |
| 39 : 2 | 19 | 1 |
| 19 : 2 | 9 | 1 |
| 9 : 2 | 4 | 1 |
| 4 : 2 | 2 | 0 |
| 2 : 2 | 1 | 0 |
| 1 : 2 | 0 | 1 |
Читаем остатки снизу вверх: .
Пример 2. 700 из десятичной в шестнадцатеричную
| Деление | Частное | Остаток |
|---|---|---|
| 700 : 16 | 43 | 12 (C) |
| 43 : 16 | 2 | 11 (B) |
| 2 : 16 | 0 | 2 |
Остатки снизу вверх: 2, B, C. Итог: .
Из любой системы в десятичную
Умножьте каждую цифру на основание в степени её позиции и сложите.
Пример 3. 101101 из двоичной в десятичную
Позиции справа налево: 0, 1, 2, 3, 4, 5.
Тот же приём работает для любой системы. Проверим на шестнадцатеричном числе из примера 2:
Получили исходные 700, значит, перевод туда и обратно сходится.
Между двоичной, восьмеричной и шестнадцатеричной
Эти три системы связаны степенями двойки: , . Поэтому делить и складывать не нужно. Достаточно разбить двоичную запись на группы: по три бита для восьмеричной, по четыре для шестнадцатеричной. Группы идут справа налево, неполную слева дополняют нулями.
| Hex | Bin | Hex | Bin |
|---|---|---|---|
| 0 | 0000 | 8 | 1000 |
| 1 | 0001 | 9 | 1001 |
| 2 | 0010 | A | 1010 |
| 3 | 0011 | B | 1011 |
| 4 | 0100 | C | 1100 |
| 5 | 0101 | D | 1101 |
| 6 | 0110 | E | 1110 |
| 7 | 0111 | F | 1111 |
Пример 4. 3AF из шестнадцатеричной в двоичную
Заменяем каждую цифру четвёркой бит: 3 → 0011, A → 1010, F → 1111. Склеиваем: . Ведущие нули можно отбросить: .
Обратный перевод — тот же приём наоборот. Двоичное число разбиваем справа по четыре: 11 1010 1111, левую группу дополняем нулями: 0011 1010 1111, заменяем на 3, A, F.
Проверка в 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') дают запись без префикса.
А вот как тот же алгоритм деления с остатками выглядит кодом:
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 бита работает только между двоичной и восьмеричной или шестнадцатеричной системами, потому что и . Для перевода между восьмеричной и шестнадцатеричной проще пройти через двоичную.
- Версия
- Версия Python — версия. Вывод кода получен на Python 3.13.
Частые ошибки
- Читают остатки сверху вниз, а не снизу вверх. Для 156 получится 00111001 вместо 10011100.
- Путают основание и показатель степени: в основание 2, а показатель 5.
- Забывают дополнить крайнюю левую группу нулями при переводе в шестнадцатеричную систему.
- Принимают
0x2bcза какое-то другое число: это обычная запись шестнадцатеричного числа, в Python регистр букв не важен. - Не проверяют результат обратным переводом, а он занимает полминуты.
Короткий вывод
Из десятичной системы переводят делением на основание, в десятичную — суммой степеней. Между двоичной и шестнадцатеричной вычисления не нужны: достаточно таблицы из шестнадцати строк. Любой свой ответ можно проверить одной строкой в Python.




