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

Теоретические основы позиционных систем счисления, аппаратные причины выбора двоичного базиса в цифровой технике и инженерные алгоритмы взаимных преобразований с обязательным контролем корректности.

1. Понятие системы счисления: позиционный и непозиционный принципы

Система счисления — это совокупность правил, приемов и соглашений для записи чисел с помощью ограниченного набора знаков (цифр).

Исторически и математически системы счисления разделяются на два фундаментальных класса:

В позиционной системе с основанием $q$ любое действительное число $A$ представляется в виде степенного полинома (развёрнутой формы):

Aq = an-1 · qn-1 + an-2 · qn-2 + ... + a1 · q1 + a0 · q0 + a-1 · q-1 + ... + a-m · q-m

где $a_i$ — цифры алфавита системы, удовлетворяющие условию $0 \le a_i < q$; $n$ — число разрядов в целой части; $m$ — число разрядов в дробной части; $q^i$ — весовой коэффициент $i$-го разряда.

2. Системы счисления в цифровой вычислительной технике

В современной вычислительной технике ключевую роль играют четыре позиционные системы счисления:

Система Основание ($q$) Алфавит цифр Сфера применения в ЭВМ
Двоичная (BIN) 2 0, 1 Аппаратный уровень: физическое хранение, передача по шинам и обработка сигналов в регистрах и АЛУ.
Восьмеричная (OCT) 8 0, 1, 2, 3, 4, 5, 6, 7 Компактная форма представления машинных адресов и битовых масок (права доступа UNIX, исторические архитектуры).
Десятичная (DEC) 10 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Интерфейс «человек-машина»: ввод исходных данных и вывод результатов вычислений пользователю.
Шестнадцатеричная (HEX) 16 0–9, A (10), B (11), C (12), D (13), E (14), F (15) Основной инженерный формат: дамп оперативной памяти, машинные коды, адресация (IPv6, MAC, шины данных), таблицы цветов (RGB).

Аппаратные причины выбора двоичного базиса

Почему микропроцессоры и схемы памяти строятся на двоичной системе, а не на более привычной человеку десятичной?

  1. Физическая надёжность и помехоустойчивость: двоичный элемент имеет всего два устойчивых состояния (есть напряжение — логическая 1, опорный потенциал / низкое напряжение — логический 0). Различить два дискретных уровня намного проще, чем десять промежуточных напряжений при колебаниях температуры и наводках.
  2. Простота схемотехники: для реализации двоичной арифметики требуются простейшие полупроводниковые элементы — переключатели (транзисторы), реализующие булеву алгебру (элементы И, ИЛИ, НЕ). Схема двоистого сумматора на порядки проще десятичного счетчика.
  3. Прямая связь с математической логикой: булева алгебра оперирует высказываниями «истина» (1) и «ложь» (0), что позволяет единообразно описывать как логику принятия решений процессором, так и арифметические вычисления.

3. Алгоритмы перевода чисел

Перевод из любой системы в десятичную (Сворачивание по развернутой форме)

Для перевода числа $A_q$ в десятичную систему достаточно записать его в развёрнутой форме и вычислить сумму произведений цифр на веса их разрядов по правилам десятичной арифметики.

Разобранный пример 1: 1011012 в десятичную систему

Нумеруем разряды справа налево, начиная с нуля: разряд 0 (вес 1), разряд 1 (вес 2), разряд 2 (вес 4), разряд 3 (вес 8), разряд 4 (вес 16), разряд 5 (вес 32).

1011012 = 1·25 + 0·24 + 1·23 + 1·22 + 0·21 + 1·20
= 32 + 0 + 8 + 4 + 0 + 1 = 4510
Разобранный пример 2: 2F16 в десятичную систему

Учитываем, что цифра F равна 15:

2F16 = 2·161 + 15·160 = 32 + 15 = 4710

Перевод целых десятичных чисел в систему с основанием q (Метод последовательного деления)

Для перевода целого десятичного числа в систему с основанием $q$ выполняется последовательное целочисленное деление исходного числа и получаемых частных на основание $q$ до тех пор, пока очередное частное не станет равным нулю. Остатки от деления, записанные в обратном порядке (от последнего к первому), образуют цифры искомого числа.

Разобранный пример 3: Перевод 4510 в двоичную систему
  • 45 / 2 = 22 (остаток 1)
  • 22 / 2 = 11 (остаток 0)
  • 11 / 2 = 5 (остаток 1)
  • 5 / 2 = 2 (остаток 1)
  • 2 / 2 = 1 (остаток 0)
  • 1 / 2 = 0 (остаток 1) — процесс завершен, частное равно 0.

Записываем остатки в обратном порядке снизу вверх: 1011012.

Проверка обратным действием: 1·32 + 0·16 + 1·8 + 1·4 + 0·2 + 1·1 = 4510. Результат строго совпал.

Разобранный пример 4: Перевод 4510 в шестнадцатеричную систему
  • 45 / 16 = 2 (остаток 13, что соответствует шестнадцатеричной цифре D)
  • 2 / 16 = 0 (остаток 2)

Записываем остатки снизу вверх: 2D16.

Проверка обратным действием: 2·161 + 13·160 = 32 + 13 = 4510. Результат верный.

Связь двоичной, восьмеричной и шестнадцатеричной систем (Триады и тетрады)

Поскольку $8 = 2^3$ и $16 = 2^4$, переход между двоичной и родственными системами осуществляется напрямую без промежуточного перевода в десятичную систему:

Схема прямого взаимного преобразования через двоичные разряды

Восьмеричное число (OCT)
Разряды $0..7$
↔ [Триады 3 бита] ↔
Двоичный код (BIN)
Базовый регистр 0/1
↔ [Тетрады 4 бита] ↔
Шестнадцатеричное число (HEX)
Разряды $0..F$
Разобранный пример 5: 1011012 в HEX через тетрады

Разбиваем число на группы по 4 бита справа налево. Недостающие старшие биты дополняем нулями слева:

0010 | 1101

  • 00102 = 216
  • 11012 = 8 + 4 + 0 + 1 = 1310 = D16

Итог: 2D16. Это наглядно объясняет, почему в системном программировании байт (8 бит) записывается ровно двумя символами HEX: $11111111_2 = \text{FF}_{16}$.

4. Типичные инженерные ошибки и контрпримеры

Ошибка 1: Нарушение направления записи остатков при делении.
Если при делении 45 на 2 остатки (1, 0, 1, 1, 0, 1) записать слева направо в порядке их получения, получится 101101 (в данном частном симметричном случае совпало). Однако для числа 18: 18/2=9 (ост 0), 9/2=4 (ост 1), 4/2=2 (ост 0), 2/2=1 (ост 0), 1/2=0 (ост 1). Запись в прямом порядке дает 01001 (9), тогда как правильный ответ снизу вверх — 10010 (18). Всегда записывайте остатки строго от последнего к первому!
Ошибка 2: Неверное разбиение на тетрады от старшего разряда.
Двоичное число 1011012 при разбиении слева направо даст 1011 (B) и 0100 (4), то есть B416 = 18010, что ошибочно. Разбиение целого числа на тетрады и триады обязано выполняться строго от младшего разряда (справа налево)!
Ошибка 3: Ошибочное использование буквенных эквивалентов в шестнадцатеричной системе.
Остаток 13 при делении ошибочно записывают как две цифры «1» и «3», получая 21316 вместо 2D16. Напомним: 10=A, 11=B, 12=C, 13=D, 14=E, 15=F.

5. Вопросы для самопроверки

  1. В чем заключается главное аппаратное преимущество двоичной системы счисления перед десятичной в цифровых ЭВМ?
  2. Какое максимальное десятичное число можно адресовать или записать одной шестнадцатеричной тетрадой?
  3. Каков алгоритм перевода целого числа из системы с основанием 10 в систему с основанием $q$? В каком порядке фиксируются остатки?
  4. Сколько шестнадцатеричных цифр необходимо для точной записи содержимого одного машинного байта (8 бит)?
  5. Какое число больше: 111102 или 1E16? Докажите расчетом.

6. Предметный итог

Позиционные системы счисления составляют фундамент цифровой архитектуры компьютеров. Аппаратная часть ЭВМ работает исключительно с двоичными сигналами (высокий/низкий логический уровень напряжения), в то время как шестнадцатеричная и восьмеричная системы являются строгими компактными математическими проекциями двоичного кода, облегчающими восприятие адресов памяти, машинных инструкций и шинных протоколов человеком. Владение прямым и обратным переводом чисел с обязательной перекрёстной проверкой — критический навык для понимания работы регистров, АЛУ и адресации оперативной памяти.