Системы счисления

Палитра с шестнадцатеричными кодами цветов
Шестнадцатеричные коды цветов

Система счисления — это правила записи чисел с помощью специальных знаков — цифр, а также соответствующие правила выполнения операций с этими числами.

Мы рассмотрим позиционные системы счисления, в которых значение каждой цифры зависит от ее позици в числе. Например, в числе 127 цифра 1 обозначает сотни, цифра 2 - десятки, а цифра 7 - единицы.

Числа, которыми мы пользуемся в повседневной жизни, записываются в системе с основанием \(10\). Например, число \(253\) можно записать так:

\[ \begin{aligned} 253 &= 200 + 50 + 3 \\ &= {\color{blue}2} \cdot 100 + {\color{blue}5} \cdot 10 + {\color{blue}3} \cdot 1 \end{aligned} \]

Используя степени, получаем: \(100 = 10^2\), \(10 = 10^1\), \(1 = 10^0\). Тогда

\[ \begin{aligned} 253 &= {\color{blue}2} \cdot 100 + {\color{blue}5} \cdot 10 + {\color{blue}3} \cdot 1 \\ &= {\color{blue}2} \cdot 10^2 + {\color{blue}5} \cdot 10^1 + {\color{blue}3} \cdot 10^0 \end{aligned} \]

Здесь видно, что каждый разряд равен цифре, умноженной на степень \(10\). Поэтому эту запись называют десятичной системой счисления.

Фраза «сотни, десятки и единицы» — это просто степени \(10\).

В десятичной системе 10 цифр: \(0, 1, 2, 3, 4, 5, 6, 7, 8, 9\).

Основание системы счисления — это количество различных цифр, используемых для записи чисел.

Чтобы явно показать основание системы, к числу добавляют маленький нижний индекс. Например, запись \(5192_{10}\) читается как «5192 в системе с основанием 10».

Кроме десятичной наиболее широко применяются ещё две системы счисления.

Двоичная — все данные в компьютерных устройствах хранятся и обрабатываются как числа, представленные в двоичной системе счисления.

Шестнадцатеричная используется для записи двоичных данных в более компактном виде. Её часто встречают при кодировании цветов и при записи адресов ячеек памяти.

В таблице ниже приведены примеры нескольких систем счисления с указанием их основания и алфавита (набора цифр).

В шестнадцатеричной системе после \(\mathtt{9}\) используют буквы \(\mathtt{A}\)\(\mathtt{F}\): символов \(\mathtt{0}\)\(\mathtt{9}\) не хватает для 16 разных цифр. Здесь \(\mathtt{A}\)\(\mathtt{F}\) — это тоже цифры (одиночные символы), которые обозначают значения \(10\)\(15\): \(\mathtt{A}=10, \mathtt{B}=11, \dots, \mathtt{F}=15\).

Важно различать цифру и число: цифра — один символ в записи, а число — само значение. Например, в записи \(314_{10}\) число равно \(314\), а \(3\), \(1\) и \(4\) — цифры этого числа.

В позиционной записи каждая цифра должна быть одним символом, иначе запись станет неоднозначной. Поэтому значение \(15\) обозначают одной цифрой \(\mathtt{F}\).

Удобно посмотреть, как одно и то же десятичное число записывается в разных основаниях:

Вопросы к слайдам

1. Попробуйте предсказать следующее число в двоичной, пятеричной и шестнадцатеричной системах счисления.

2. Найдите числа, у которых в одной системе запись короче минимум на 2 символа, чем в другой. Чем это объясняется?

3. Какие числа на слайдах имеют двоичную запись, оканчивающуюся на \(\mathtt{0}\)? Как это связано с делимостью на \(2\)?

4. В какие моменты в троичной, пятеричной и восьмеричной системах происходит перенос через несколько младших разрядов сразу?

5. Почему \(\mathtt{100}_{10}\) записывается как \(\mathtt{144}_8\), \(\mathtt{64}_{16}\), \(\mathtt{1100100}_2\)?

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

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

Развёрнутая форма записи числа — это представление числа как суммы произведений его цифр на соответствующие степени основания.

Например, для четырёхразрядного числа \((a_3 a_2 a_1 a_0)_p\) в системе с основанием \(p\), где \(a_3, a_2, a_1, a_0\) — цифры числа:

В десятичной системе это выглядит так:

Например, чтобы перевести \(\mathtt{1756}_8\) в десятичную, разложим число по степеням \(8\) и сложим:

\[ \mathtt{1756}_8 = 1\cdot 8^3 + 7\cdot 8^2 + 5\cdot 8^1 + 6\cdot 8^0 = 512 + 448 + 40 + 6 = \mathtt{1006}_{10} \]

Задача: переведите из шестнадцатеричной системы в десятичную.

a) \(\mathtt{75}_{16}\)

b) \(\mathtt{1F}_{16}\)

c) \(\mathtt{A03}_{16}\)


Решение:

\[ \begin{aligned} \text{a) } \mathtt{75}_{16} &= 7\cdot 16^1 + 5\cdot 16^0 = 112 + 5 = \mathtt{117}_{10} \\ \text{b) } \mathtt{1F}_{16} &= 1\cdot 16^1 + 15\cdot 16^0 = 16 + 15 = \mathtt{31}_{10} \\ \text{c) } \mathtt{A03}_{16} &= 10\cdot 16^2 + 0\cdot 16^1 + 3\cdot 16^0 = 2560 + 0 + 3 = \mathtt{2563}_{10} \end{aligned} \]

Задача: переведите из двоичной системы в десятичную.

a) \(\mathtt{1111}_2\)

b) \(\mathtt{1010}_2\)

c) \(\mathtt{1001}_2\)


Решение:

\[ \begin{aligned} \text{a) } \mathtt{1111}_2 &= 1\cdot 2^3 + 1\cdot 2^2 + 1\cdot 2^1 + 1\cdot 2^0 = \mathtt{15}_{10} \\ \text{b) } \mathtt{1010}_2 &= 1\cdot 2^3 + 0\cdot 2^2 + 1\cdot 2^1 + 0\cdot 2^0 = \mathtt{10}_{10} \\ \text{c) } \mathtt{1001}_2 &= 1\cdot 2^3 + 0\cdot 2^2 + 0\cdot 2^1 + 1\cdot 2^0 = \mathtt{9}_{10} \end{aligned} \]
Задачи для тренировки

1. Разложите числа по степеням основания:

a) \(\mathtt{534}_7\)

b) \(\mathtt{A2}_{16}\)

c) \(\mathtt{10101}_2\)

Ответ

a) \(\mathtt{534}_7 = 5\cdot 7^2 + 3\cdot 7^1 + 4\cdot 7^0\).

b) \(\mathtt{A2}_{16} = 10\cdot 16^1 + 2\cdot 16^0\).

c) \(\mathtt{10101}_2 = 1\cdot 2^4 + 0\cdot 2^3 + 1\cdot 2^2 + 0\cdot 2^1 + 1\cdot 2^0\).


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

a) \(\mathtt{642}_8\)

b) \(\mathtt{3B}_{16}\)

c) \(\mathtt{11001}_2\)

Ответ

a) \(\mathtt{642}_8 = 6\cdot 8^2 + 4\cdot 8^1 + 2 = 384 + 32 + 2 = \mathtt{418}_{10}\).

b) \(\mathtt{3B}_{16} = 3\cdot 16^1 + 11\cdot 16^0 = 48 + 11 = \mathtt{59}_{10}\).

c) \(\mathtt{11001}_2 = 1\cdot 2^4 + 1\cdot 2^3 + 0\cdot 2^2 + 0\cdot 2^1 + 1\cdot 2^0 = \mathtt{25}_{10}\).


3. Проверьте корректность записи чисел в указанной системе счисления:

a) \(\mathtt{572}_7\)

b) \(\mathtt{19}_8\)

c) \(\mathtt{G3}_{16}\)

d) \(\mathtt{10102}_3\)

Ответ

Корректна только d): в системе с основанием \(3\) допустимы цифры \(0,1,2\).

a) некорректно (цифра \(7\) недопустима для основания \(7\)).

b) некорректно (цифра \(9\) недопустима для основания \(8\)).

c) некорректно (\(\mathtt{G}\) не является цифрой шестнадцатеричной системы).


4. Восстановите число по развёрнутой записи:

a) \(4\cdot 10^3 + 0\cdot 10^2 + 7\cdot 10^1 + 9\cdot 10^0\)

b) \(1\cdot 8^3 + 2\cdot 8^2 + 0\cdot 8^1 + 5\cdot 8^0\)

c) \(1\cdot 2^5 + 0\cdot 2^4 + 1\cdot 2^3 + 1\cdot 2^2 + 0\cdot 2^1 + 1\cdot 2^0\)

Ответ

a) \(\mathtt{4079}_{10}\).

b) \(\mathtt{1205}_8\).

c) \(\mathtt{101101}_2\).


5. Ответьте без полного перевода в десятичную систему:

a) какое из чисел больше: \(\mathtt{10000}_2\) или \(\mathtt{777}_8\)?

b) делится ли \(\mathtt{A30}_{16}\) на \(256\)?

c) почему \(\mathtt{7000}_8\) и \(\mathtt{111000000000}_2\) выглядят по-разному, но обозначают одно и то же число?

Ответ

a) \(\mathtt{777}_8\) больше, так как \(\mathtt{10000}_2 = 16\), а \(\mathtt{777}_8 = 511\).

b) Нет: для делимости на \(256 = 16^2\) последние две шестнадцатеричные цифры должны быть \(\mathtt{00}\), а здесь \(\mathtt{30}\).

c) Потому что основание системы разное. \(\mathtt{7000}_8 = 7\cdot 8^3\), а \(\mathtt{111000000000}_2 = 7\cdot 2^9\), и это одно и то же значение.

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

Это обратный процесс к развёрнутой форме: из значения числа восстанавливаем его цифры в системе с основанием \(p\).

Алгоритм извлечения цифр — это последовательное деление числа на основание \(p\) с записью остатков.

Остатки и есть цифры числа в системе с основанием \(p\), но они получаются от младшего разряда к старшему.

Поэтому итоговую запись составляем в обратном порядке: от последнего остатка к первому.

Например, переведём \(\mathtt{1006}_{10}\) в восьмеричную систему:

Читаем остатки снизу вверх (то есть в обратном порядке их получения): \(\mathtt{1006}_{10} = \mathtt{1756}_8\).

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

Проверка обратным переводом:

\[ \begin{aligned} \mathtt{1756}_8 &= 1\cdot 8^3 + 7\cdot 8^2 + 5\cdot 8^1 + 6\cdot 8^0 \\ &= 512 + 448 + 40 + 6 = \mathtt{1006}_{10} \end{aligned} \]

Задача: переведите из десятичной системы в двоичную.

a) \(\mathtt{15}_{10}\)

b) \(\mathtt{10}_{10}\)

c) \(\mathtt{9}_{10}\)


Решение:

\[ \begin{aligned} \text{a) } \mathtt{15}:\mathtt{2} &= \mathtt{7}\ \text{остаток}\ \textcolor{blue}{\mathtt{1}} \\ \mathtt{7}:\mathtt{2} &= \mathtt{3}\ \text{остаток}\ \textcolor{blue}{\mathtt{1}} \\ \mathtt{3}:\mathtt{2} &= \mathtt{1}\ \text{остаток}\ \textcolor{blue}{\mathtt{1}} \\ \mathtt{1}:\mathtt{2} &= \mathtt{0}\ \text{остаток}\ \textcolor{blue}{\mathtt{1}} \end{aligned} \]

Читаем остатки снизу вверх: \(\mathtt{15}_{10} = \mathtt{1111}_2\).

\[ \begin{aligned} \text{b) } \mathtt{10}:\mathtt{2} &= \mathtt{5}\ \text{остаток}\ \textcolor{blue}{\mathtt{0}} \\ \mathtt{5}:\mathtt{2} &= \mathtt{2}\ \text{остаток}\ \textcolor{blue}{\mathtt{1}} \\ \mathtt{2}:\mathtt{2} &= \mathtt{1}\ \text{остаток}\ \textcolor{blue}{\mathtt{0}} \\ \mathtt{1}:\mathtt{2} &= \mathtt{0}\ \text{остаток}\ \textcolor{blue}{\mathtt{1}} \end{aligned} \]

Читаем остатки снизу вверх: \(\mathtt{10}_{10} = \mathtt{1010}_2\).

\[ \begin{aligned} \text{c) } \mathtt{9}:\mathtt{2} &= \mathtt{4}\ \text{остаток}\ \textcolor{blue}{\mathtt{1}} \\ \mathtt{4}:\mathtt{2} &= \mathtt{2}\ \text{остаток}\ \textcolor{blue}{\mathtt{0}} \\ \mathtt{2}:\mathtt{2} &= \mathtt{1}\ \text{остаток}\ \textcolor{blue}{\mathtt{0}} \\ \mathtt{1}:\mathtt{2} &= \mathtt{0}\ \text{остаток}\ \textcolor{blue}{\mathtt{1}} \end{aligned} \]

Читаем остатки снизу вверх: \(\mathtt{9}_{10} = \mathtt{1001}_2\).

Задача: переведите из десятичной системы в шестнадцатеричную.

a) \(\mathtt{117}_{10}\)

b) \(\mathtt{31}_{10}\)

c) \(\mathtt{2563}_{10}\)


Решение:

\[ \begin{aligned} \text{a) } \mathtt{117}:\mathtt{16} &= \mathtt{7}\ \text{остаток}\ \textcolor{blue}{\mathtt{5}} \\ \mathtt{7}:\mathtt{16} &= \mathtt{0}\ \text{остаток}\ \textcolor{blue}{\mathtt{7}} \end{aligned} \]

Читаем остатки снизу вверх: \(\mathtt{117}_{10} = \mathtt{75}_{16}\).

\[ \begin{aligned} \text{b) } \mathtt{31}:\mathtt{16} &= \mathtt{1}\ \text{остаток}\ \textcolor{blue}{\mathtt{15}} \\ \mathtt{1}:\mathtt{16} &= \mathtt{0}\ \text{остаток}\ \textcolor{blue}{\mathtt{1}} \end{aligned} \]

Так как \(\mathtt{15} = \mathtt{F}\), получаем: \(\mathtt{31}_{10} = \mathtt{1F}_{16}\).

\[ \begin{aligned} \text{c) } \mathtt{2563}:\mathtt{16} &= \mathtt{160}\ \text{остаток}\ \textcolor{blue}{\mathtt{3}} \\ \mathtt{160}:\mathtt{16} &= \mathtt{10}\ \text{остаток}\ \textcolor{blue}{\mathtt{0}} \\ \mathtt{10}:\mathtt{16} &= \mathtt{0}\ \text{остаток}\ \textcolor{blue}{\mathtt{10}} \end{aligned} \]

Так как \(\mathtt{10} = \mathtt{A}\), получаем: \(\mathtt{2563}_{10} = \mathtt{A03}_{16}\).

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

1. Переведите числа:

a) \(\mathtt{26}_{10}\to ?_2\)

b) \(\mathtt{73}_{10}\to ?_8\)

c) \(\mathtt{254}_{10}\to ?_{16}\)

Ответ

a) \(\mathtt{11010}_2\).

b) \(\mathtt{111}_8\).

c) \(\mathtt{FE}_{16}\).


2. Переведите числа через последовательные деления:

a) \(\mathtt{45}_{10}\to ?_2\)

b) \(\mathtt{130}_{10}\to ?_8\)

c) \(\mathtt{170}_{10}\to ?_{16}\)

Ответ

a) \(\mathtt{45}:\mathtt{2}=\mathtt{22}\) ост. \(\mathtt{1}\), \(\mathtt{22}:\mathtt{2}=\mathtt{11}\) ост. \(\mathtt{0}\), \(\mathtt{11}:\mathtt{2}=\mathtt{5}\) ост. \(\mathtt{1}\), \(\mathtt{5}:\mathtt{2}=\mathtt{2}\) ост. \(\mathtt{1}\), \(\mathtt{2}:\mathtt{2}=\mathtt{1}\) ост. \(\mathtt{0}\), \(\mathtt{1}:\mathtt{2}=\mathtt{0}\) ост. \(\mathtt{1}\). Итого: \(\mathtt{101101}_2\).

b) \(\mathtt{130}:\mathtt{8}=\mathtt{16}\) ост. \(\mathtt{2}\), \(\mathtt{16}:\mathtt{8}=\mathtt{2}\) ост. \(\mathtt{0}\), \(\mathtt{2}:\mathtt{8}=\mathtt{0}\) ост. \(\mathtt{2}\). Итого: \(\mathtt{202}_8\).

c) \(\mathtt{170}:\mathtt{16}=\mathtt{10}\) ост. \(\mathtt{10}\), \(\mathtt{10}:\mathtt{16}=\mathtt{0}\) ост. \(\mathtt{10}\). Итого: \(\mathtt{AA}_{16}\).


3. Найдите и исправьте ошибки в переводе:

a) \(\mathtt{59}_{10} = \mathtt{3G}_{16}\)

b) \(\mathtt{100}_{10} = \mathtt{110010}_2\)

c) \(\mathtt{64}_{10} = \mathtt{80}_8\)

Ответ

a) Неверная цифра \(\mathtt{G}\). Правильно: \(\mathtt{59}_{10} = \mathtt{3B}_{16}\).

b) Пропущен один ноль в конце. Правильно: \(\mathtt{100}_{10} = \mathtt{1100100}_2\).

c) В восьмеричной системе нет цифры \(\mathtt{8}\). Правильно: \(\mathtt{64}_{10} = \mathtt{100}_8\).


4. Переведите и проверьте обратным переводом:

a) \(\mathtt{94}_{10}\to ?_2\)

b) \(\mathtt{94}_{10}\to ?_8\)

c) \(\mathtt{94}_{10}\to ?_{16}\)

Ответ

a) \(\mathtt{94}_{10} = \mathtt{1011110}_2\), проверка: \(64+16+8+4+2=94\).

b) \(\mathtt{94}_{10} = \mathtt{136}_8\), проверка: \(1\cdot 8^2+3\cdot 8+6=64+24+6=94\).

c) \(\mathtt{94}_{10} = \mathtt{5E}_{16}\), проверка: \(5\cdot 16+14=80+14=94\).


5. Объясните, почему остатки при делении на основание \(p\) можно использовать как цифры системы с основанием \(p\).

Ответ

Потому что при делении на \(p\) остаток всегда удовлетворяет \(0 \le r < p\), а это ровно диапазон допустимых цифр этой системы.

Быстрый перевод между двоичной и шестнадцатеричной

Тетрада — это группа из четырёх двоичных разрядов.

Если взять тетрады от \(\mathtt{0000}_2\) до \(\mathtt{1111}_2\), то получится ровно 16 разных вариантов — столько же, сколько цифр в шестнадцатеричной системе. Поэтому каждой шестнадцатеричной цифре соответствует одна тетрада (4 двоичных разряда). Это верно потому, что \(16^1 = 2^4\).

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

Например, в записи \(\mathtt{0011}_2\) два нуля слева — это ведущие нули, так как \(\mathtt{0011}_2 = \mathtt{11}_2\); они нужны только, чтобы число состояло из 4 разрядов.

В строке \(\mathtt{0000}_2\) синим выделены только три левых нуля: это дополняющие нули. Правый ноль оставляем обычным, потому что это минимальная запись числа \(\mathtt{0}_2\).

Перевод из шестнадцатеричной в двоичную

Алгоритм \(16 \to 2\):

  1. Идём по цифрам слева направо и заменяем каждую её тетрадой из таблицы.
  2. В каждой тетраде сохраняем все 4 разряда, включая ведущие нули.
  3. Записываем тетрады подряд.
  4. Если нужно, убираем ведущие нули слева у всей двоичной записи (кроме числа \(\mathtt{0}\)).

Задача: переведите из шестнадцатеричной в двоичную.

a) \(\mathtt{C50A}_{16}\to ?_2\)

b) \(\mathtt{9B}_{16}\to ?_2\)

c) \(\mathtt{1AF}_{16}\to ?_2\)


Решение:

a)

b)

c)

Перевод из двоичной в шестнадцатеричную

Алгоритм \(2 \to 16\):

  1. Разбиваем двоичную запись справа налево на тетрады (группы по 4 разряда).
  2. Если в левой тетраде меньше 4 разрядов, дополняем её слева нулями.
  3. Каждую тетраду заменяем одной шестнадцатеричной цифрой по таблице.
  4. Записываем полученные шестнадцатеричные цифры слева направо.
  5. Удаляем ведущие нули.

Задача: переведите из двоичной в шестнадцатеричную.

a) \(\mathtt{1010111100101101}_2\to ?_{16}\)

b) \(\mathtt{11011010}_2\to ?_{16}\)

c) \(\mathtt{111010111}_2\to ?_{16}\)


Решение:

a)

b)

c)

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

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

a) \(\mathtt{AF}_{16}\)

b) \(\mathtt{9B}_{16}\)

c) \(\mathtt{C5}_{16}\)

Ответ

a) \(\mathtt{10101111}_2\).

b) \(\mathtt{10011011}_2\).

c) \(\mathtt{11000101}_2\).


2. Переведите в шестнадцатеричную систему:

a) \(\mathtt{10101100}_2\)

b) \(\mathtt{111001}_2\)

c) \(\mathtt{110101111}_2\)

Ответ

a) \(\mathtt{AC}_{16}\).

b) \(\mathtt{39}_{16}\).

c) \(\mathtt{1AF}_{16}\).


По материалам:
1. К. Ю. Поляков, Е. А. Еремин. Учебник информатики для 10–11 классов. Углубленный уровень.
2. Anthony Croft, Robert Davison. Foundation Maths. Pearson.
3. ВМК МГУ — школе. Информатика: пособие для подготовки к ЕГЭ.