Системы счисления. Перевод чисел из одной системы счисления в другую
Что такое система счисления?
Система счисления — знаковая система, в которой числа записываются по определенным правилам с помощью знаков фиксированного алфавита (цифр).
Два основных класса систем счисления:
- Непозиционные: значение цифры не зависит от занимаемой позиции (Римская система: X в числе X или XV всегда 10). Крайне сложны для автоматизированных вычислений.
- Позиционные: значение цифры определяется ее позицией (разрядом) в числе. Основание системы ($q$) определяет, во сколько раз изменяется вес соседних разрядов.
Развернутая форма записи числа
Любое число $A$ в позиционной системе с основанием $q$ представимо в виде степенного многочлена:
Aq = an-1 · qn-1 + ... + a1 · q1 + a0 · q0 + a-1 · q-1 + ...
Пример в десятичной системе (q=10):
37510 = 3·102 + 7·101 + 5·100
= 300 + 70 + 5
Пример в двоичной системе (q=2):
1012 = 1·22 + 0·21 + 1·20
= 4 + 0 + 1 = 510
Основные системы счисления в ЭВМ
- Двоичная (q=2, алфавит: 0, 1): основной машинный уровень. Физически представляется напряжениями на шинах и триггерах.
- Восьмеричная (q=8, алфавит: 0..7): $8 = 2^3$. Используется для сжатой записи двоичных триад (исторические ЭВМ, права доступа UNIX).
- Десятичная (q=10, алфавит: 0..9): естественный язык человеческого взаимодействия и ввода-вывода.
- Шестнадцатеричная (q=16, алфавит: 0..9, A..F): $16 = 2^4$. Стандарт для адресации памяти, машинных инструкций, дампов ОЗУ и цветов.
Аппаратные причины выбора двоичной системы
Компьютер не мыслит абстрактными цифрами — он переключает микроскопические полупроводниковые транзисторы.
- Помехоустойчивость: надежно отличить два физических состояния (0 В и +3.3 В) при тепловых шумах и деградации схемы несравнимо проще, чем десять уровней.
- Простота схемной реализации: базовые логические вентили (И, ИЛИ, НЕ) состоят всего из нескольких транзисторов.
- Синхронизация с логикой: истинность и ложь булевой алгебры идеально ложатся на биты 1 и 0.
Перевод в десятичную систему: Сворачивание
Алгоритм:
- Пронумеровать разряды числа целой части справа налево от $0$ до $n-1$.
- Умножить каждую цифру на основание $q$ в степени номера разряда.
- Сложить полученные произведения по правилам десятичной арифметики.
110102 = 1·24 + 1·23 + 0·22 + 1·21 + 0·20
= 16 + 8 + 0 + 2 + 0 = 2610
Перевод из шестнадцатеричной системы в DEC
Особое внимание буквенным эквивалентам: A=10, B=11, C=12, D=13, E=14, F=15.
Пример перевода числа 3B16 в десятичную систему:
Разряды: 1 (для цифры 3), 0 (для цифры B)
3B16 = 3·161 + 11·160
= 48 + 11 = 5910
Вес разрядов шестнадцатеричной системы растет стремительно: $16^0 = 1$, $16^1 = 16$, $16^2 = 256$, $16^3 = 4096$.
Перевод DEC → BIN: Метод деления на 2
Последовательно делим целое число на 2 нацело, фиксируя остатки, пока частное не станет равным нулю.
Пример: перевод 2510 в двоичную систему:
25 / 2 = 12 (остаток 1) ↑ младший бит
12 / 2 = 6 (остаток 0) |
6 / 2 = 3 (остаток 0) |
3 / 2 = 1 (остаток 1) |
1 / 2 = 0 (остаток 1) | старший бит
Запись остатков СНИЗУ ВВЕРХ: 110012
Инженерный принцип: обратная проверка
Ни один перевод в цифровой технике не считается выполненным, пока он не подтвержден обратным вычислением.
Проверяем полученный результат 11001₂ переводом обратно в десятичную систему:
110012 = 1·24 + 1·23 + 0·22 + 0·21 + 1·20
= 16 + 8 + 0 + 0 + 1 = 2510
Результат совпал с исходным числом (25 = 25). Корректность доказана.
Связь оснований 2, 8 и 16: Триады и тетрады
Так как основания являются степенями двойки ($8 = 2^3, 16 = 2^4$), переводы между ними выполняются мгновенно без деления:
Триада (3 бита):
Каждая восьмеричная цифра $0..7$ кодируется 3 битами двоичного числа.
Пример: $5_8 = 101_2$, $7_8 = 111_2$.
Тетрада (4 бита / ниббл):
Каждая шестнадцатеричная цифра $0..F$ кодируется 4 битами двоичного числа.
Пример: $A_{16} = 1010_2$, $F_{16} = 1111_2$.
Пример перевода BIN ↔ HEX через тетрады
Переведем 110111101010₂ в шестнадцатеричную систему:
- Разбиваем на тетрады СПРАВА НАЛЕВО:
1101 | 1110 | 1010
- Заменяем каждую тетраду на символ HEX:
1101₂ = 8+4+0+1 = 13 = D
1110₂ = 8+4+2+0 = 14 = E
1010₂ = 8+0+2+0 = 10 = A
Результат: DEA16
Осторожно: типичные ошибки при переводах
- Запись остатков в прямом порядке:
Получив остатки 1, 0, 0, 1, 1, записать их как 100112 (19) вместо правильного снизу вверх 110012 (25).
- Разбиение на тетрады слева направо:
Число 10111₂ при разбиении слева направо даст 1011 и 1000 (B816 = 18410), тогда как корректно справа налево: 0001 и 0111 (1716 = 2310).
- Подмена цифры буквами HEX:
Остаток 11 записывается не как 11, а как цифра B.
Экспресс-тренинг (1 минута)
Определите устно или в черновике:
- Сколько бит занимает шестнадцатеричное число
7F₁₆?
- Каково десятичное значение двоичного байта
10000001₂?
- Чему равно число
16₁₀ в шестнадцатеричной системе?
Самопроверка:
1) 2 тетрады = 8 бит (1 байт).
2) 128 + 1 = 129₁₀.
3) 10₁₆ (один разряд второго порядка и 0 единиц).
Связь с архитектурой компьютера
- 1 Байт = 8 бит = 2 тетрады HEX (00 .. FF). Дампы памяти всегда выводятся байтовыми парами.
- Адресная шина: 32-разрядный процессор адресует память через 8 hex-символов (например,
0x00401000), а 64-разрядный — через 16 hex-символов.
- Машинное слово: регистры процессора оперируют двоичными разрядами напрямую через логические вентили.
Тематический интернет-мем: Grumpy Cat («There are 10 types of people: those who understand binary, and I hate both»).
Первоисточник: Wikimedia Commons (
File:Grumpy_Cat_meme_example.jpg).
Автор фото: Gage Skidmore.
Лицензия: Creative Commons Attribution-Share Alike 4.0 International (CC BY-SA 4.0).
Изменения: Пропорциональное масштабирование и встраивание через автономный data URI (JPEG Base64) для гарантированной работы без сети.