Двоичная (бинарная) система счисления использует основание 2 и два символа — 0 и 1. Она лежит в основе работы всех цифровых устройств. Ниже разобраны алгоритмы перевода чисел из десятичной, восьмеричной, шестнадцатеричной и других систем в двоичную — с формулами, примерами и таблицей соответствий.
Перевод целого десятичного числа в двоичную систему
Стандартный метод — последовательное деление на 2 с фиксацией остатков.
Алгоритм:
- Разделите число на 2. Запишите остаток (0 или 1).
- Частное снова разделите на 2. Снова запишите остаток.
- Повторяйте, пока частное не станет равным 0.
- Запишите остатки в обратном порядке — снизу вверх.
Пример: переводим 58₁₀ в двоичную.
| Деление | Частное | Остаток |
|---|---|---|
| 58 ÷ 2 | 29 | 0 |
| 29 ÷ 2 | 14 | 1 |
| 14 ÷ 2 | 7 | 0 |
| 7 ÷ 2 | 3 | 1 |
| 3 ÷ 2 | 1 | 1 |
| 1 ÷ 2 | 0 | 1 |
Читаем остатки снизу вверх: 111010₂.
Проверка: 1×2⁵ + 1×2⁴ + 1×2³ + 0×2² + 1×2¹ + 0×2⁰ = 32 + 16 + 8 + 0 + 2 + 0 = 58 ✓
Перевод дробной части десятичного числа
Дробную часть переводят умножением на 2.
Алгоритм:
- Умножьте дробную часть на 2.
- Запишите целую часть результата (0 или 1).
- Новую дробную часть снова умножьте на 2.
- Повторяйте, пока дробная часть не обнулится или не будет достигнута нужная точность.
Пример: переводим 0,625₁₀.
| Умножение | Результат | Целая часть |
|---|---|---|
| 0,625 × 2 | 1,25 | 1 |
| 0,25 × 2 | 0,5 | 0 |
| 0,5 × 2 | 1,0 | 1 |
Читаем целые части сверху вниз: 0,101₂.
Проверка: 1×2⁻¹ + 0×2⁻² + 1×2⁻³ = 0,5 + 0 + 0,125 = 0,625 ✓
Некоторые десятичные дроби (например, 0,3) не имеют точного конечного двоичного представления — получается бесконечная периодическая дробь. В таких случаях результат округляют до нужного числа разрядов.
Быстрый перевод из восьмеричной системы
Восьмеричная система (основание 8 = 2³) позволяет переводить числа напрямую: каждая восьмеричная цифра заменяется тройкой битов (триадой).
Таблица соответствия:
| Восьмеричная | Двоичная |
|---|---|
| 0 | 000 |
| 1 | 001 |
| 2 | 010 |
| 3 | 011 |
| 4 | 100 |
| 5 | 101 |
| 6 | 110 |
| 7 | 111 |
Пример: 357₈ → ?
- 3 → 011
- 5 → 101
- 7 → 111
Результат: 011101111₂ (или 11101111₂ без ведущего нуля).
Быстрый перевод из шестнадцатеричной системы
Шестнадцатеричная система (основание 16 = 2⁴) работает аналогично: каждая цифра заменяется четвёркой битов (тетрадой).
Таблица соответствия:
| Hex | Двоичная | Hex | Двоичная | |
|---|---|---|---|---|
| 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 |
Пример: A3F₁₆ → ?
- A → 1010
- 3 → 0011
- F → 1111
Результат: 101000111111₂.
Перевод из систем с произвольным основанием
Если основание системы не является степенью двойки (например, 3, 5, 6, 7, 9, 12), прямой побитовый перевод невозможен. Используйте двухэтапный метод:
Этап 1. Переведите число в десятичную систему, разложив его по степеням основания:
$$N_{10} = a_n \cdot b^n + a_{n-1} \cdot b^{n-1} + \ldots + a_1 \cdot b^1 + a_0 \cdot b^0$$
где b — основание исходной системы, aᵢ — цифры числа.
Этап 2. Переведите полученное десятичное число в двоичную систему делением на 2.
Пример: 213₅ → ?
Этап 1 — в десятичную: 2×5² + 1×5¹ + 3×5⁰ = 50 + 5 + 3 = 58₁₀
Этап 2 — 58₁₀ в двоичную (см. пример выше): 111010₂
Таблица соответствий для первых 16 чисел
| Десятичная | Двоичная | Восьмеричная | Шестнадцатеричная |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 |
| 2 | 10 | 2 | 2 |
| 3 | 11 | 3 | 3 |
| 4 | 100 | 4 | 4 |
| 5 | 101 | 5 | 5 |
| 6 | 110 | 6 | 6 |
| 7 | 111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
Частые ошибки при переводе
- Неверный порядок остатков. Остатки при делении на 2 нужно записывать снизу вверх (от последнего к первому), а не сверху вниз.
- Потеря ведущих нулей в триадах и тетрадах. При быстром переводе из восьмеричной или шестнадцатеричной системы каждая цифра должна быть заменена полной группой битов: 0 → 000 (а не пустая строка), 2 → 0010 в hex-переводе.
- Ошибки в буквенных обозначениях. В шестнадцатеричной системе A = 10, B = 11, C = 12, D = 13, E = 14, F = 15. Путаница возникает, когда букву принимают за её порядковый номер в алфавите.
- Бесконечные дроби. Десятичная дробь 0,1 не имеет точного конечного двоичного представления. При работе с плавающей точкой это приводит к ошибкам округления — учитывайте это при программировании.