1. Понятие системы счисления: позиционный и непозиционный принципы
Система счисления — это совокупность правил, приемов и соглашений для записи чисел с помощью ограниченного набора знаков (цифр).
Исторически и математически системы счисления разделяются на два фундаментальных класса:
- Непозиционные системы: количественный эквивалент каждого знака абсолютно фиксирован и не зависит от его позиции в числе (яркий пример — римская нумерация: в числах
X, XV, XX символ X всегда означает ровно десять единиц). В непозиционных системах крайне затруднительно аппаратно реализовать арифметические операции сложения и умножения больших чисел.
- Позиционные системы: количественное значение каждой цифры определяется как её номиналом, так и позицией (разрядом), которую она занимает в записи числа. Основанием системы $q$ называется количество уникальных цифр, используемых для представления чисел.
В позиционной системе с основанием $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, опорный потенциал / низкое напряжение — логический 0). Различить два дискретных уровня намного проще, чем десять промежуточных напряжений при колебаниях температуры и наводках.
- Простота схемотехники: для реализации двоичной арифметики требуются простейшие полупроводниковые элементы — переключатели (транзисторы), реализующие булеву алгебру (элементы И, ИЛИ, НЕ). Схема двоистого сумматора на порядки проще десятичного счетчика.
- Прямая связь с математической логикой: булева алгебра оперирует высказываниями «истина» (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$, переход между двоичной и родственными системами осуществляется напрямую без промежуточного перевода в десятичную систему:
- Каждой восьмеричной цифре соответствует ровно 3 двоичных разряда (триада).
- Каждой шестнадцатеричной цифре соответствует ровно 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. Вопросы для самопроверки
- В чем заключается главное аппаратное преимущество двоичной системы счисления перед десятичной в цифровых ЭВМ?
- Какое максимальное десятичное число можно адресовать или записать одной шестнадцатеричной тетрадой?
- Каков алгоритм перевода целого числа из системы с основанием 10 в систему с основанием $q$? В каком порядке фиксируются остатки?
- Сколько шестнадцатеричных цифр необходимо для точной записи содержимого одного машинного байта (8 бит)?
- Какое число больше: 111102 или 1E16? Докажите расчетом.
6. Предметный итог
Позиционные системы счисления составляют фундамент цифровой архитектуры компьютеров. Аппаратная часть ЭВМ работает исключительно с двоичными сигналами (высокий/низкий логический уровень напряжения), в то время как шестнадцатеричная и восьмеричная системы являются строгими компактными математическими проекциями двоичного кода, облегчающими восприятие адресов памяти, машинных инструкций и шинных протоколов человеком. Владение прямым и обратным переводом чисел с обязательной перекрёстной проверкой — критический навык для понимания работы регистров, АЛУ и адресации оперативной памяти.