Системы счисления и преобразование чисел
Системы счисления и преобразование чисел
Зачем нужны системы счисления в вычислительных системах
Компьютер хранит и обрабатывает данные в виде битов — нулей и единиц. Из-за этого внутренняя арифметика и представление чисел естественным образом опираются на двоичную систему счисления. Однако человеку удобнее читать и записывать числа в десятичной системе, а инженерам часто удобны также восьмеричная и шестнадцатеричная системы как компактные формы записи двоичных данных.
В этой статье разберём:
- что такое система счисления и основание
- как читается позиционная запись числа
- как переводить целые и дробные числа между основаниями
- как быстро переводить между 2, 8 и 16
Основные понятия
Система счисления — способ записи чисел с помощью набора символов (цифр) и правил.
Основание системы счисления (часто обозначают ) — количество различных цифр, которые используются в системе.
- В десятичной системе , цифры: 0–9
- В двоичной системе , цифры: 0–1
- В восьмеричной системе , цифры: 0–7
- В шестнадцатеричной системе , цифры: 0–9 и A–F (где A=10, B=11, ..., F=15)
Позиционные и непозиционные системы
Позиционная система счисления — система, где значение цифры зависит от её позиции (разряда) в записи числа.
Пример: в числе 505 цифра 5 слева означает пять сотен, а 5 справа — пять единиц.
Непозиционные системы встречаются реже (пример — римские числа), и в вычислительных системах почти не используются из-за неудобства арифметики.
Как позиционная запись превращается в значение числа
Целая часть
Если число записано в системе с основанием как последовательность цифр , то его значение равно сумме разрядов:
Разберём элементы формулы:
- — значение числа (в привычном смысле)
- — знак суммирования: нужно сложить вклад каждого разряда
- — номер разряда, начиная с 0 справа (разряд единиц)
- — цифра в разряде (она всегда меньше основания: )
- — основание системы счисления
- — вес разряда (например, для десятичной: , , )
Пример: переведём в десятичное значение.
- справа налево разряды: , , ,
- получаем:
Значит, .
Дробная часть
Дробная часть тоже подчиняется позиционному принципу, только веса идут в отрицательные степени основания.
Если запись выглядит как (точка — разделитель), то вклад дробной части:
- — первая цифра после точки
- , и так далее
Пример: .
Значит, .
Часто используемые основания и их цифры
| Основание | Название | Допустимые цифры | Где встречается |
|---|---|---|---|
| 2 | двоичная | 0–1 | внутренняя логика и память компьютера |
| 8 | восьмеричная | 0–7 | компактная запись двоичных данных (исторически) |
| 10 | десятичная | 0–9 | повседневная запись чисел |
| 16 | шестнадцатеричная | 0–9, A–F | адреса памяти, машинные коды, цвета, хеши |
Перевод чисел в десятичную систему
Из любой системы в десятичную (целые)
Алгоритм:
- пронумеровать разряды справа налево, начиная с 0
- умножить каждую цифру на соответствующий вес
- сложить результаты
Пример: .
Значит, .
Из любой системы в десятичную (дробные)
Алгоритм:
- для цифр после точки использовать веса
- суммировать вклад
Пример: в двоичной системе мы пока не переводим, но для обратного направления полезно понимать: если бы было , то это .
Перевод из десятичной системы в другую (целые числа)
Самый практичный способ для целых чисел — деление с остатком.
Алгоритм перевода в основание :
- Разделить на , запомнить остаток.
- Результат деления снова разделить на , опять запомнить остаток.
- Повторять, пока частное не станет равно 0.
- Ответ — остатки, прочитанные в обратном порядке.
Пример: переведём в двоичную.
| Деление | Частное | Остаток (бит) |
|---|---|---|
| 22 | 1 | |
| 11 | 0 | |
| 5 | 1 | |
| 2 | 1 | |
| 1 | 0 | |
| 0 | 1 |
Читаем остатки снизу вверх: .
Значит, .
Перевод из десятичной системы в другую (дробные числа)
Для дробной части используется умножение на основание.
Идея: при умножении дроби на целая часть результата становится очередной цифрой после точки.
Алгоритм для дроби в основание :
- Умножить дробную часть на .
- Целая часть произведения — следующая цифра.
- Новая дробная часть — дробная часть произведения.
- Повторять до получения 0 или до нужной точности.
Пример: переведём в двоичную.
| Шаг | Умножаем на 2 | Целая часть (бит) | Новая дробная часть |
|---|---|---|---|
| 1 | 1 | 0.25 | |
| 2 | 0 | 0.5 | |
| 3 | 1 | 0.0 |
Получили .
Важно: не всякая десятичная дробь имеет конечную запись в двоичной системе. Например, в двоичной системе будет бесконечной периодической дробью. В вычислительных системах это приводит к погрешностям представления, к которым мы вернёмся в следующих темах.
Быстрые переводы между 2, 8 и 16
Поскольку:
можно переводить без деления и умножения — группируя биты.
Двоичная ↔ восьмеричная
- чтобы получить восьмеричную запись из двоичной: разбить двоичное число справа налево на группы по 3 бита
- каждая тройка бит — одна восьмеричная цифра
Пример: .
- группируем:
- переводим тройки: , ,
Получаем .
Двоичная ↔ шестнадцатеричная
- разбить справа налево на группы по 4 бита
- каждая четвёрка — одна шестнадцатеричная цифра
Пример: .
- группируем:
- переводим: , ,
Получаем .
Шестнадцатеричная ↔ восьмеричная
Прямого группирования нет (4 и 3 не совпадают). Практически делают так:
- перевести 16 → 2 (каждый hex-символ в 4 бита)
- затем 2 → 8 (группы по 3 бита)
Практические соглашения записи
Чтобы не путать основания, используют обозначения:
- индекс: , , ,
- или префиксы (в языках программирования):
0b1011,0o77,255,0xFF
Важно: префиксы зависят от языка и его правил, а индекс — универсальная учебная запись.
Типичные ошибки при переводе
- Путать порядок чтения остатков в методе деления (остатки читаются снизу вверх).
- Использовать недопустимые цифры для основания (например, цифру 8 в восьмеричной системе).
- Забывать, что дроби могут получаться бесконечными (нужна остановка по точности).
- Неверно группировать биты (группировать нужно от точки: для целой части — справа налево, для дробной — слева направо).
Что дальше по курсу
В этой статье мы научились понимать позиционную запись и переводить числа между системами счисления. Это фундамент для следующих тем курса: представления отрицательных чисел, фиксированной и плавающей запятой, а также анализа ошибок округления.