§ 11. Перевод чисел из одной позиционной системы счисления в другую
Привет! Сегодня мы разберёмся с тем, как числа путешествуют между разными системами счисления. Это не просто академическое упражнение — именно так компьютер "понимает" команды, которые вы даёте ему в привычной десятичной форме, и именно поэтому программисты видят мир немного иначе, чем обычные пользователи.
11.1. Перевод целого десятичного числа в систему счисления с основанием q
Как перевести привычное нам десятичное число, скажем, 25 или 163, в двоичную, восьмеричную или любую другую систему? Существует универсальный алгоритм, основанный на делении с остатком.
📋 Универсальный алгоритм перевода
- Делим исходное число на основание новой системы счисления (q)
- Запоминаем остаток — это будет одна из цифр результата
- Берём целую часть от деления и повторяем процесс, пока не получим ноль
- Собираем число из остатков, записывая их справа налево (начиная с последнего остатка)
Примеры переводов
Пример 1. Перевод 25₁₀ в двоичную систему
25 ÷ 2 = 12, остаток 1
12 ÷ 2 = 6, остаток 0
6 ÷ 2 = 3, остаток 0
3 ÷ 2 = 1, остаток 1
1 ÷ 2 = 0, остаток 1
Читаем остатки снизу вверх: 25₁₀ = 11001₂
Пример 2. Перевод 163₁₀ в восьмеричную систему
163 ÷ 8 = 20, остаток 3
20 ÷ 8 = 2, остаток 4
2 ÷ 8 = 0, остаток 2
Результат: 163₁₀ = 243₈
Пример 3. Перевод 709₁₀ в шестнадцатеричную систему
709 ÷ 16 = 44, остаток 5
44 ÷ 16 = 2, остаток 12 (C)
2 ÷ 16 = 0, остаток 2
Результат: 709₁₀ = 2C5₁₆
Перевод через деление — это как разборка числа на запчасти в новом формате. Остатки от деления становятся цифрами в новой системе счисления
🧩 Задача со звёздочкой
Пример 4. В каких системах счисления запись числа 22₁₀ оканчивается на 4?
Если число заканчивается на 4, значит остаток от деления 22 на основание q равен 4:
- 22 mod q = 4
- Следовательно, (22 - 4) mod q = 0, то есть 18 делится на q нацело
- Делители 18: {1, 2, 3, 6, 9, 18}
- Но так как запись оканчивается на 4, основание должно быть больше 4
Подходят: q ∈ {6, 9, 18}
11.2. Перевод целого десятичного числа в двоичную систему (быстрый способ)
Для чисел до 10 000, особенно если они близки к степени двойки, есть более элегантный метод — разложение на сумму степеней двойки.
💡 Идея метода
Представь число как сумму степеней двойки (1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024...), начиная с наибольшей.
Пример: Переведём 1096₁₀ в двоичную систему
- Ближайшая степень двойки, не превосходящая 1096: 1024 = 2¹⁰
- Остаток: 1096 - 1024 = 72
- Ближайшая степень к 72: 64 = 2⁶
- Остаток: 72 - 64 = 8 = 2³
- Остаток: 0
Итого: 1096 = 1024 + 64 + 8 = 2¹⁰ + 2⁶ + 2³
В двоичной записи ставим 1 в разрядах 10, 6 и 3 (считая справа с нуля):
1096₁₀ = 10001001000₂
🎮 Где это применяется?
Этот метод особенно удобен, когда работаешь с памятью компьютера (256 МБ, 512 ГБ, 1024 пикселя) — все эти числа кратны степеням двойки! Именно поэтому в играх разрешение экрана часто бывает 1920×1080, 2560×1440 — эти числа удобно представлять в двоичной системе.
11.3. Перевод из системы с основанием p в систему с основанием q
Что делать, если нужно перевести число из, скажем, пятеричной системы в шестеричную? Есть два пути.
Прямой перевод
Выполнять деление в исходной системе счисления. Сложно для человека, но возможно.
Через десятичную систему (универсальный)
Система p → Десятичная → Система q
Пример 5. Переведём 1234₅ в шестеричную систему
Шаг 1: Переводим в десятичную:
1234₅ = 1·5³ + 2·5² + 3·5¹ + 4·5⁰
= 125 + 50 + 15 + 4
= 194₁₀
Шаг 2: Переводим из десятичной в шестеричную:
194 ÷ 6 = 32, остаток 2
32 ÷ 6 = 5, остаток 2
5 ÷ 6 = 0, остаток 5
Результат: 194₁₀ = 522₆
Итог: 1234₅ = 522₆
Десятичная система — это универсальный переводчик между любыми системами счисления. Иногда проще сделать два простых шага, чем один сложный
11.4. Перевод конечной десятичной дроби в систему счисления с основанием q
С дробями работаем похожим образом, но вместо деления используем умножение.
📋 Алгоритм перевода дробей
- Умножаем дробную часть на основание q
- Записываем целую часть результата — это цифра дроби
- Берём дробную часть результата и повторяем, пока она не станет равна нулю (или пока не достигнем нужной точности)
- Собираем дробь, записывая цифры слева направо (в порядке получения)
Пример 6. Переведём 0,1875₁₀ в двоичную систему
0,1875 × 2 = 0,375 → цифра 0
0,375 × 2 = 0,75 → цифра 0
0,75 × 2 = 1,5 → цифра 1
0,5 × 2 = 1,0 → цифра 1
Результат: 0,1875₁₀ = 0,0011₂
⚠️ Важно!
Не все десятичные дроби имеют конечную запись в других системах. Например, 0,1₁₀ в двоичной системе — бесконечная дробь (именно поэтому компьютеры иногда "ошибаются" в вычислениях с дробями!).
11.5. «Быстрый» перевод чисел в компьютерных системах счисления
Вот где начинается магия! Двоичная, восьмеричная и шестнадцатеричная системы связаны особым образом:
8 = 2³
Одна восьмеричная цифра = три двоичных цифры (триада)
16 = 2⁴
Одна шестнадцатеричная цифра = четыре двоичных цифры (тетрада)
Таблица соответствий
Восьмеричная → Двоичная
| Восьм. | Двоичная триада |
|---|---|
| 0 | 000 |
| 1 | 001 |
| 2 | 010 |
| 3 | 011 |
| 4 | 100 |
| 5 | 101 |
| 6 | 110 |
| 7 | 111 |
Шестнадцатеричная → Двоичная
| Шестн. | Двоичная тетрада |
|---|---|
| 0 | 0000 |
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
| 5 | 0101 |
| 6 | 0110 |
| 7 | 0111 |
| 8 | 1000 |
| 9 | 1001 |
| A | 1010 |
| B | 1011 |
| C | 1100 |
| D | 1101 |
| E | 1110 |
| F | 1111 |
Быстрый перевод между "компьютерными" системами — это как знать секретные тропы в лесу. Не нужно идти длинным путём через десятичную систему, можно напрямую!
Примеры быстрого перевода
Пример 7. Из двоичной в восьмеричную: 11010100111₂ → ?₈
- Разбиваем справа налево на триады:
11.010.100.111 - Дополняем левую группу нулём:
011.010.100.111 - Заменяем каждую триаду:
3.2.4.7
Результат: 11010100111₂ = 3247₈
Пример 8. Из шестнадцатеричной в двоичную: 16AC₁₆ → ?₂
- Заменяем каждую цифру тетрадой:
0001.0110.1010.1100 - Убираем незначащие нули слева:
1.0110.1010.1100
Результат: 16AC₁₆ = 1011010101100₂
Пример 9. Из восьмеричной в шестнадцатеричную: 67252₈ → ?₁₆
- Переводим в двоичную (триадами):
110.111.010.101.010 - Разбиваем на тетрады справа налево:
110.1110.1010.1010 - Дополняем слева:
0110.1110.1010.1010 - Заменяем тетрадами:
6.E.A.A
Результат: 67252₈ = 6EAA₁₆
Пример 10. Дробные числа: 0,101100011₂ → ?₁₆
- Разбиваем слева направо на тетрады:
0,1011.0001.1 - Дополняем правую группу справа нулями:
0,1011.0001.1000 - Заменяем тетрадами:
0,B.1.8
Результат: 0,101100011₂ = 0,B18₁₆
Задачи на понимание
Пример 11. Сколько значащих нулей в двоичной записи числа 1601₈?
Переводим в двоичную:
1601₈ = 001.110.000.001₂
= 1110000001₂
Считаем нули, исключая незначащие (слева): 6 значащих нулей
Пример 12. Среди четырёхзначных шестнадцатеричных чисел с ровно 7 единицами найдём:
Четырёхзначное hex-число: от 1000₁₆ до FFFF₁₆ (в двоичном: 16 бит)
- Наименьшее: ставим 7 единиц в младшие разряды
0001000000111111₂ = 103F₁₆ - Наибольшее: ставим 7 единиц в старшие разряды
1111111000000000₂ = FE00₁₆
✅ Ключевые выводы
Что важно запомнить из этого урока
🤔 Проверь себя
Задачи и вопросы для самопроверки
1. Мини-кейс: Кодирование цвета
Тебе нужно закодировать цвет в формате RGB: красный канал = 163₁₀. Переведи это значение в шестнадцатеричную систему (именно так записывают цвета в веб-дизайне, например #A3B5C7). Какой результат?
Подсказка: используй алгоритм деления на 16
2. Задача на понимание: Степени двойки
Почему в программировании так популярны числа 256, 512, 1024? Как это связано с двоичной системой?
Подсказка: попробуй представить эти числа как степени двойки
3. Практическое применение: Анализ адреса памяти
Представь, что ты анализируешь лог-файлы и видишь адрес памяти: 16AC₁₆. Переведи его в двоичную систему, чтобы понять, какие биты установлены в 1.
Подсказка: используй быстрый метод через тетрады
4. Творческое задание: Объясни младшекласснику
Сможешь объяснить младшекласснику, почему компьютеры "думают" в двоичной системе, а программисты часто пишут числа в шестнадцатеричной? Попробуй придумать аналогию из повседневной жизни.
Подсказка: подумай про выключатели света (вкл/выкл) и про то, как проще записывать длинные последовательности
5. Исследование: Найди hex-числа в коде
Попробуй найти в коде любимой игры или приложения примеры использования шестнадцатеричных чисел. Где они встречаются и зачем?
Подсказка: цвета, адреса памяти, идентификаторы
6. Переведите целые числа из десятичной системы в двоичную
- 1) 1025
- 2) 512
- 3) 600
7. Переведите число 1147 из десятичной системы в другие системы
- 1) пятеричную
- 2) восьмеричную
- 3) шестнадцатеричную
8. Переведите двоичные числа в восьмеричную систему
- 1) 1010001001011₂
- 2) 1010,00100101₂
Подсказка: используйте триады
9. Переведите числа в двоичную систему счисления
- 1) 266₈
- 2) 266₁₆
10. Сколько значащих нулей в двоичной записи?
- 1) восьмеричного числа 2501
- 2) шестнадцатеричного числа 12A
11. Найдите среди четырёхзначных восьмеричных чисел с ровно 5 единицами в двоичной записи
- 1) наименьшее число
- 2) наибольшее число
12. Все 5-буквенные слова из букв О, П, Р, Т
Все 5-буквенные слова, составленные из букв О, П, Р, Т, записаны в алфавитном порядке и пронумерованы:
1. ООООО
2. ООООП
3. ООООР
4. ООООТ
5. ОООПО
...
Какие слова находятся в этом списке на 531-м и 787-м местах?
Подсказка: подумай о связи с системами счисления
13. Укажите все основания систем счисления
Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись десятичного числа 82 оканчивается на 5.