Перевод между системами счисления

Часто нужно переводить числа из одной системы в другую. Ниже — базовые приёмы, которые используются чаще всего.

Из \(b\) в десятичную

Используем разложение по степеням основания:

\[ (a_k a_{k-1}\dots a_0)_b = \sum_{i=0}^{k} a_i b^i. \]

Например, \((243)_5 = 2\cdot 5^2 + 4\cdot 5 + 3 = 73\).

Из десятичной в \(b\)

Используем деление с остатком:

  1. Делим число на основание \(b\), записываем остаток.
  2. Делим полученное частное на \(b\), снова записываем остаток.
  3. Повторяем, пока частное не станет нулём.
  4. Записываем остатки снизу вверх — это и есть запись числа в новой системе.

Задача:

Переведите \(157_{10}\) в двоичную систему.


Решение:

\[ \begin{aligned} 157 : 2 &= 78 \ \text{остаток } 1 \\ 78 : 2 &= 39 \ \text{остаток } 0 \\ 39 : 2 &= 19 \ \text{остаток } 1 \\ 19 : 2 &= 9 \ \text{остаток } 1 \\ 9 : 2 &= 4 \ \text{остаток } 1 \\ 4 : 2 &= 2 \ \text{остаток } 0 \\ 2 : 2 &= 1 \ \text{остаток } 0 \\ 1 : 2 &= 0 \ \text{остаток } 1 \end{aligned} \]

Остатки снизу вверх дают \(10011101_2\).

Дробная часть

Для дробной части используем умножение на основание:

  1. Умножаем дробную часть на \(b\).
  2. Целая часть результата — следующая цифра.
  3. Оставшаяся дробная часть идёт на следующий шаг.

Задача:

Переведите \(0.375_{10}\) в двоичную систему.


Решение:

\[ \begin{aligned} 0.375 \cdot 2 &= 0.75 &&\Rightarrow 0 \\ 0.75 \cdot 2 &= 1.5 &&\Rightarrow 1 \\ 0.5 \cdot 2 &= 1.0 &&\Rightarrow 1 \end{aligned} \]

Получаем \(0.011_2\).

Если дробная часть стала нулём, перевод завершён. Если дробная часть начинает повторяться, запись периодическая, и обычно берут нужное число знаков.

Смешанное число

Переводим целую и дробную части отдельно, затем объединяем.

Например, \(13.625_{10} = 1101.101_2\).

Быстрые переводы для оснований 2, 8, 16

Если основание — степень двойки, удобно группировать двоичную запись:

  • для восьмеричной — по 3 бита,
  • для шестнадцатеричной — по 4 бита.

Таблица для шестнадцатеричных цифр:

Hex Bin
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

Задача:

Переведите \((110101011)_2\) в шестнадцатеричную систему.


Решение:

Группируем по 4 бита справа налево: \(0001\ 1010\ 1011\).

Получаем \((1AB)_{16}\).

Задачи для тренировки

1. Переведите в десятичную систему:

a) \((243)_5\)

b) \((110011010)_2\) (сначала в восьмеричную, затем в десятичную)

Ответ

a) \(73\).

b) \((110\ 011\ 010)_2 = (632)_8 = 6\cdot 64 + 3\cdot 8 + 2 = 410\).


2. Переведите \(345_{10}\) в систему с основанием \(6\).

Ответ

\(345_{10} = (1333)_6\).


3. Переведите \((7B)_{16}\) в двоичную систему.

Ответ

\((7B)_{16} = (0111\ 1011)_2 = (1111011)_2\).


4. Переведите \(0.625_{10}\) в двоичную систему.

Ответ

\(0.625_{10} = 0.101_2\).


5. Переведите \(21.75_{10}\) в двоичную систему.

Ответ

\(21.75_{10} = 10101.11_2\).