Перевод систем счисления
Алгоритмы перевода чисел между системами счисления с примерами. Двоичная, восьмеричная, десятичная и шестнадцатеричная системы.
Что такое системы счисления
Система счисления — это способ записи чисел с помощью определённого набора символов. Одно и то же значение можно представить по-разному: число 42 в десятичной системе записывается как 101010 в двоичной, 52 в восьмеричной и 2A в шестнадцатеричной.
Основание системы показывает, сколько уникальных цифр доступно для записи. В позиционных системах (а именно они используются повсеместно) значение каждого разряда умножается на степень основания.
Основные системы счисления в программировании
Десятичная система (основание 10)
Привычная нам система с цифрами от 0 до 9. Используется в повседневной жизни, финансах и науке.
Двоичная система (основание 2)
Цифры только 0 и 1. Электронные схемы работают на двух состояниях — сигнал есть или нет, поэтому двоичная система естественна для вычислительной техники.
Восьмеричная система (основание 8)
Цифры от 0 до 7. Встречается в UNIX-системах при обозначении прав доступа к файлам (например, chmod 755).
Шестнадцатеричная система (основание 16)
Цифры 0–9 и буквы A–F. Каждая буква заменяет число: A=10, B=11, C=12, D=13, E=14, F=15. Широко применяется для записи цветов в вебе (#FF5733), адресов памяти и машинного кода.
Перевод в десятичную систему
Любое число из любой системы переводится в десятичную через развёрнутую форму записи. Каждая цифра умножается на основание в степени своего разряда.
Формула перевода
Для числа d₂d₁d₀ в системе с основанием b:
N = d₀ × b⁰ + d₁ × b¹ + d₂ × b²
Пример: двоичное 1101 в десятичное
1101₂ = 1 × 2³ + 1 × 2² + 0 × 2¹ + 1 × 2⁰
= 1 × 8 + 1 × 4 + 0 × 2 + 1 × 1
= 8 + 4 + 0 + 1
= 13₁₀
Пример: шестнадцатеричное 1F в десятичное
1F₁₆ = 1 × 16¹ + 15 × 16⁰
= 16 + 15
= 31₁₀
Обратите внимание: буква F — это 15.
Перевод из десятичной системы
Метод деления
Для перевода десятичного числа в любую другую систему используется последовательное деление на основание.
Алгоритм:
- Делите число на основание целевой системы
- Записывайте остаток от каждого деления
- Продолжайте, пока частное не станет равно 0
- Прочитайте остатки снизу вверх
Пример: число 158 в двоичную систему
158 ÷ 2 = 79 остаток 0
79 ÷ 2 = 39 остаток 1
39 ÷ 2 = 19 остаток 1
19 ÷ 2 = 9 остаток 1
9 ÷ 2 = 4 остаток 1
4 ÷ 2 = 2 остаток 0
2 ÷ 2 = 1 остаток 0
1 ÷ 2 = 0 остаток 1
Результат: читаем остатки снизу вверх → 10011110₂
Пример: число 158 в восьмеричную систему
158 ÷ 8 = 19 остаток 6
19 ÷ 8 = 2 остаток 3
2 ÷ 8 = 0 остаток 2
Результат: 236₈
Быстрый перевод между родственными системами
Системы с основаниями 2, 8 и 16 связаны степенью двойки. Это позволяет переводить числа напрямую, минуя десятичную систему.
Почему это работает
- 8 = 2³ — значит, 3 двоичных разряда = 1 восьмеричная цифра
- 16 = 2⁴ — значит, 4 двоичных разряда = 1 шестнадцатеричная цифра
Таблица соответствия
| Десятичное | Двоичная группа (3) | Восьмеричная | Двоичная группа (4) | Шестнадцатеричная |
|---|---|---|---|---|
| 0 | 000 | 0 | 0000 | 0 |
| 1 | 001 | 1 | 0001 | 1 |
| 5 | 101 | 5 | 0101 | 5 |
| 9 | — | — | 1001 | 9 |
| 10 | — | — | 1010 | A |
| 15 | — | — | 1111 | F |
Перевод из двоичной в шестнадцатеричную
Число 11110110 разбивается на тетрады (группы по 4 бита) справа налево:
11110110 → 1111 0110 → F 6 → F6₁₆
Перевод из шестнадцатеричной в двоичную
Каждая шестнадцатеричная цифра заменяется четырьмя двоичными:
3A₁₆ → 3 A → 0011 1010 → 00111010₂
Типичные ошибки при переводе
Ошибка 1: Неправильный порядок чтения остатков
Остатки читаются снизу вверх, а не сверху вниз.
Ошибка 2: Забытая позиция цифры
Позиции нумеруются с нуля справа налево. Крайний правый разряд — это 0.
Ошибка 3: Путаница с цифрами шестнадцатеричной системы
Буквы A–F всегда означают числа 10–15. При вычислениях заменяйте их на эти значения.
Практическое применение
Понимание переводов между системами счисления нужно не только для учёбы. В программировании шестнадцатеричная запись используется для цветов в CSS (color: #E74C3C), сетевых адресов IPv6, дампов памяти при отладке. Восьмеричная система встречается в UNIX при работе с правами доступа (chmod 644). Двоичная — основа всей цифровой электроники.
Умение быстро переводить между системами 2–8–16 позволяет читать дампы памяти, понимать значения флагов и эффективнее работать с низкоуровневым кодом.