Системы счисления, родственные двоичной
Сейчас мы узнаем, как компьютеры научились говорить на нескольких языках одновременно! Представь: двоичная система — это как очень длинное сообщение из одних нулей и единиц. Неудобно, правда? Поэтому программисты придумали системы-переводчики — восьмеричную и шестнадцатеричную. Они работают с теми же данными, но записывают их гораздо короче и понятнее.
§ 1.3.1. Восьмеричная система счисления
💡 Зачем она вообще нужна?
Помнишь, как в двоичной системе даже небольшое число выглядит как бесконечная гирлянда из 0 и 1? Например, число 103 превращается в 1100111₂ — семь символов! А теперь представь, что ты пишешь код для игры, и таких чисел сотни. Глаза разбегаются.
Восьмеричная система счисления (основание 8) — это как сжатие файла. Используем всего восемь цифр: 0, 1, 2, 3, 4, 5, 6, 7. И всё!
Как это работает? Разбираем формулу
В любой позиционной системе счисления каждая цифра имеет свой вес — это степень основания. Для восьмеричной системы формула выглядит так:
an-1·8n-1 + an-2·8n-2 + ... + a₁·8¹ + a₀·8⁰
Звучит страшно? Давай на примере!
Волшебное превращение восьмеричного числа в десятичное
🔥 Пример 1: Переводим из восьмеричной в десятичную
Возьмём восьмеричное число 1063₈ (читается: «один-ноль-шесть-три по основанию восемь»).
Раскладываем его по разрядам:
1063₈ = 1·8³ + 0·8² + 6·8¹ + 3·8⁰
Вычисляем степени восьмёрки:
- 8³ = 512
- 8² = 64
- 8¹ = 8
- 8⁰ = 1
Подставляем:
1·512 + 0·64 + 6·8 + 3·1 = 512 + 0 + 48 + 3 = 563₁₀
Ответ: 1063₈ = 563₁₀
Видишь? Всего четыре цифры вместо девяти в десятичной!
Связь восьмеричной и двоичной систем: секретный код!
А теперь фишка: 8 = 2³. Это значит, что между восьмеричной и двоичной системами есть прямая связь!
Каждая восьмеричная цифра = ровно три двоичных разряда (триада).
Таблица 1.4. Шпаргалка переводчика
| Восьмеричная цифра | Двоичная триада |
|---|---|
| 0 | 000 |
| 1 | 001 |
| 2 | 010 |
| 3 | 011 |
| 4 | 100 |
| 5 | 101 |
| 6 | 110 |
| 7 | 111 |
🔥 Пример 2: Из десятичной в восьмеричную
Переведём число 103₁₀ в восьмеричную систему.
Способ: Делим число на 8, пока не получим ноль. Остатки записываем справа налево (начиная с последнего!).
103 ÷ 8 = 12 (остаток 7)
12 ÷ 8 = 1 (остаток 4)
1 ÷ 8 = 0 (остаток 1)
Читаем остатки снизу вверх: 147₈
Проверка: 1·64 + 4·8 + 7·1 = 64 + 32 + 7 = 103₁₀ ✅
Конвейер по переводу из двоичной в восьмеричную систему
🔥 Пример 3: Из двоичной в восьмеричную (быстрый способ!)
Переведём двоичное число 1101101100₂ в восьмеричную систему.
Алгоритм:
- Разбиваем двоичное число на триады справа налево
- Если слева не хватает цифр — дополняем нулями
- Заменяем каждую триаду на восьмеричную цифру по таблице
1101101100₂ → дополняем → 001 101 101 100₂
Смотрим по таблице:
- 001₂ = 1₈
- 101₂ = 5₈
- 101₂ = 5₈
- 100₂ = 4₈
Ответ: 1101101100₂ = 1554₈
Круто же? Никаких сложных вычислений!
§ 1.3.2. Шестнадцатеричная система счисления
💡 Когда восьмёрки мало...
В программировании часто работают с цветами, адресами памяти, кодами ошибок. Там нужна ещё более компактная запись. Встречайте: шестнадцатеричная система (основание 16)!
Используются цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 и буквы A, B, C, D, E, F.
🤔 Почему буквы?
Потому что нам нужно 16 разных символов, а цифр всего 10. Поэтому:
- A = 10
- B = 11
- C = 12
- D = 13
- E = 14
- F = 15
Пример из жизни: Когда ты выбираешь цвет в фотошопе или настраиваешь RGB-подсветку на клавиатуре, видишь коды типа #FF5733 — это и есть шестнадцатеричная запись!
Собираем пазл: связь шестнадцатеричной и двоичной систем
🔥 Пример 4: Из десятичной в шестнадцатеричную
Переведём 154₁₀ в шестнадцатеричную систему.
Делим на 16 и записываем остатки:
154 ÷ 16 = 9 (остаток 10 → это A)
9 ÷ 16 = 0 (остаток 9)
Читаем снизу вверх: 9A₁₆
Проверка: 9·16 + 10·1 = 144 + 10 = 154₁₀ ✅
Связь с двоичной: ещё проще!
16 = 2⁴, значит одна шестнадцатеричная цифра = четыре двоичных разряда (тетрада).
Таблица 1.5. Большая шпаргалка
| Hex цифра | Десятичное | Двоичная тетрада |
|---|---|---|
| 0 | 0 | 0000 |
| 1 | 1 | 0001 |
| 2 | 2 | 0010 |
| 3 | 3 | 0011 |
| 4 | 4 | 0100 |
| 5 | 5 | 0101 |
| 6 | 6 | 0110 |
| 7 | 7 | 0111 |
| 8 | 8 | 1000 |
| 9 | 9 | 1001 |
| A (10) | 10 | 1010 |
| B (11) | 11 | 1011 |
| C (12) | 12 | 1100 |
| D (13) | 13 | 1101 |
| E (14) | 14 | 1110 |
| F (15) | 15 | 1111 |
🔥 Пример 5: Из шестнадцатеричной в двоичную
Переведём 3AF₁₆ в двоичную систему.
Просто заменяем каждую hex-цифру на тетраду:
- 3₁₆ = 0011₂
- A₁₆ = 1010₂
- F₁₆ = 1111₂
Объединяем: 3AF₁₆ = 0011 1010 1111₂
Убираем незначащие нули: 1110101111₂
🔥 Пример 6: Из двоичной в hex (через тетрады!)
Переведём 11101101100110₂ в шестнадцатеричную систему.
Шаги:
- Разбиваем на тетрады справа налево
- Дополняем слева нулями, если нужно
- Заменяем по таблице
11101101100110₂ → 0011 1011 0110 0110₂
Переводим:
- 0011₂ = 3₁₆
- 1011₂ = B₁₆
- 0110₂ = 6₁₆
- 0110₂ = 6₁₆
Ответ: 11101101100110₂ = 3B66₁₆
Вместо 14 символов — всего 4! Вот это компрессия!
Дружная семья систем счисления
🎯 Самое главное
#FF0000 = красный), адреса в памяти компьютера, MAC-адреса устройств
✅ Проверь себя
Проверь, как хорошо ты усвоил материал!
1. Переведи эти числа из десятичной системы в восьмеричную (без калькулятора!):
а) 55₁₀
б) 600₁₀
в) 2022₁₀
Подсказка: делим на 8, записываем остатки снизу вверх
2. Переведи из восьмеричной в двоичную (используй триады):
а) 65₈
б) 123₈
в) 1756₈
Подсказка: каждую восьмеричную цифру замени на три двоичных
3. Переведи из двоичной в восьмеричную:
а) 11011011₂
б) 11101110111₂
в) 110011001100011₂
Подсказка: разбей на триады справа налево, дополни нулями слева
4. Создай таблицу сложения и умножения для восьмеричной системы
Твой вызов: Создай таблицу сложения и умножения для восьмеричной системы (как в начальной школе, но для цифр 0-7). Попробуй по ней что-нибудь посчитать!
5. Переведи эти числа из десятичной в шестнадцатеричную:
а) 55₁₀
б) 600₁₀
в) 2022₁₀
Подсказка: делим на 16, не забывай про буквы A-F
6. Переведи из hex в двоичную (тетрадами!):
а) A5₁₆
б) 1C3₁₆
в) 9A5E₁₆
Подсказка: каждую hex-цифру замени на четыре двоичных
7. Переведи из двоичной в hex:
а) 11011011₂
б) 11101110111₂
в) 11001100110011₂
Подсказка: разбей на тетрады справа налево
8. Быстрый способ перевода: из hex в восьмеричную
Задача: Придумай, как можно быстро перевести целое число из hex в восьмеричную, не переводя его сначала в десятичную. Проверь свой способ на числах:
а) A5₁₆
б) 1C3₁₆
в) 9A5E₁₆
Подсказка: используй двоичную как промежуточную систему
🎯 Задачи с изюминкой
9. Заполни таблицу: каждое число запиши во всех четырёх системах (2, 8, 10, 16)
| Основание 2 | Основание 8 | Основание 10 | Основание 16 |
|---|---|---|---|
| 101010 | ? | ? | ? |
| ? | 127 | ? | ? |
| ? | ? | 321 | ? |
| ? | ? | ? | 2A |
10. Сравни двоичные числа x и y (не переводя в десятичную!)
а) x = 1010101111010111₂, y = 1010101110101111₂
б) x = 10101011010101101₂, y = 101011010101101₂
Подсказка: думай как компьютер — разряд за разрядом слева направо
11. Среди этих трёх чисел найди наименьшее и запиши его в десятичной системе
36₁₆, 64₈, 111010₂
Подсказка: переведи все в десятичную и сравни
12. Среди этих трёх чисел найди наибольшее и запиши его в десятичной системе
36₁₆, 63₈, 111101₂
13. Вычисли выражения (ответ дай в десятичной системе)
а) (1111101₂ + AF₁₆) : 36₈
б) 125₈ + 101₂ · 2A₁₆ − 141₈
Подсказка: переведи все числа в десятичную, выполни действия
14. Философский вопрос: Почему восьмеричная и шестнадцатеричная системы считаются системами, родственными двоичной?
Какая ещё позиционная система счисления может считаться родственной двоичной?
Подумай: что общего между основаниями 2, 8 и 16?
15. Исследовательская задача: Формула перевода в систему с основанием q
Ты умеешь переводить целые числа из десятичной системы в двоичную, восьмеричную и шестнадцатеричную. Попробуй сформулировать правило перевода целых десятичных чисел в систему счисления с основанием q (любым!).
Проверь справедливость своего правила: переведи число 555₁₀ в систему счисления с основанием 5.
💡 Где это применяется в реальной жизни
🎨 Веб-дизайн
Все цвета на сайтах записываются в hex-формате: #RRGGBB
Пример: #FF0000 = красный, #00FF00 = зелёный, #0000FF = синий
💻 Программирование
Адреса в памяти компьютера, отладка программ, работа с низкоуровневым кодом
Пример: адрес памяти 0x7FFE1234
🎮 Игры
Коды читов, редактирование сохранений, моддинг игр часто используют hex
Пример: изменение количества денег в сохранении игры
🔐 Кибербезопасность
Анализ сетевых пакетов, шифрование данных, исследование вредоносного ПО
Пример: MAC-адрес 00:1A:2B:3C:4D:5E
🚀 Круто, правда?
Теперь ты — почти хакер! Ты понимаешь язык, на котором говорят компьютеры, и можешь свободно переводить числа между разными системами счисления. Это фундаментальный навык для любого программиста, веб-разработчика или специалиста по кибербезопасности.
Поздравляем! Теперь ты говоришь на языке компьютеров! 🎓