Предыдущий урок: Как работает компьютер? Часть 15. Информация и электричество.
Почему не только 10?
Десятичная система счисления — это основа нашей повседневной математики. Мы используем её, даже не задумываясь: считаем деньги, измеряем время, записываем возраст. Но почему именно 10 цифр (0–9) стали стандартом для человечества? И почему компьютеры, в отличие от нас, предпочитают двоичный код? Давайте разберёмся.
Люди используют десятичную систему, потому что у нас 10 пальцев. С древних времён люди использовали пальцы для счёта, и эта привычка закрепилась в культуре. Вавилоняне, египтяне, индийцы — все приходили к системе с основанием 10, потому что она интуитивно понятна. Даже слово "цифра" происходит от арабского "ṣifr" (ноль), а позиционная запись чисел (где значение цифры зависит от её места) пришла из Индии через арабский мир.
Каждая позиция числа — это степень десятки:
- 365 = 3*100 + 6*10 + 5*1 = 3*10^2+6*10^1+5*10^0
Такой подход позволяет компактно записывать большие числа. Например, "2025" гораздо удобнее, чем "MMXXV" в римской системе.
Компьютеры работают с электрическими сигналами, а не с пальцами. Их "язык" — это двоичная система (0 и 1), потому что:
- Физическая простота. Транзистор (основа процессора) может быть либо включён (1), либо выключен (0). Десять состояний потребовали бы сложных и ненадёжных схем.
- Логика вычислений. Все операции (сложение, умножение) сводятся к простым действиям с битами. Например, сложение 5 + 3 в двоичной системе: 5 = 0101, 3 = 0011
Результат: 1000 (то есть 8). Об это поговорим позже. - Экономия ресурсов. Для хранения числа 255 в двоичной системе нужно 8 бит (11111111), а в десятичной — 3 цифры, но каждая занимает минимум 4 бита (в формате BCD), что уже 12 бит.
Важно понять, что ни десятичная запись ни какая либо другая не «перепрошивают» смысл числа в машине: внутри по-прежнему бегают 0 и 1, а альтернативные системы — это всего лишь разные алфавиты для внешнего взгляда человека на те же двоичные состояния. Компьютеру безразлично, видит ли программист на экране 255, 11111111или 0xF; для процессора это один и тот же набор из восьми единичных бит, то есть 8 разрядов, в каждом из которых стоит 1. Поэтому в интерфейсах отладчиков и редакторов часто встречается префиксная запись вроде 0xFF для шестнадцатеричных чисел или суффиксы наподобие «b» для двоичных — это договорённости для удобства чтения людьми, а не потребность железа.
Теперь снова вернёмся к исходному вопросу курса «Как работает компьютер». Представьте, что вы нажимаете клавишу. В клавиатуре срабатывает контакт и рождает электрический импульс — по сути, короткая последовательность 0 и 1. Контроллер клавиатуры превращает этот импульс в код символа — например, в набор из 8 бит, то есть 1 байт, который уходит к процессору. Процессор принимает биты, интерпретирует их в соответствии с таблицами кодировки и текущей программой, записывает в память по адресу, который сам тоже записан в виде чисел. На всём пути — от нажатия до появления символа на экране — нет ни одной «десятичной молекулы»; везде разряды, где каждая позиция — это вклад степени основания: 2^0, 2^1, 2^2, 2^3, …, складывающиеся в нужное значение.
Как только задача переезжает внутрь компьютера, выигрывают системы, которые хорошо ложатся на физику: двоичная с основанием 2 как фундамент, шестнадцатеричная с основанием 16 как удобный «вид для людей», реже — восьмеричная с основанием 8 по историческим причинам. Важно сохранить интуицию: система счисления — это всего лишь способ записи одного и того же количества. То, что в тетради выглядит как 3, в железе превращается в 1101, а на экране отладчика — в 0x0D. Смысл один, меняется только алфавит.
В следующем уроке мы перейдём от интуитивной идеи к практическому счёту: научимся уверенно читать двоичные записи, переводить значения туда и обратно, а также увидим, как операция разбора по степеням 2 становится рутиной для железа. Это первый реальный шаг к тому, чтобы «думать как компьютер» и понимать, почему привычное нам 10 — лишь один из вариантов описания одного и того же количества, тогда как внутри машины правит бал 2.
Двоичная система (0 и 1)
Представьте, что компьютер — это огромный набор выключателей. Каждый из них может быть либо включён (1), либо выключен (0). Всё, что делает компьютер — от показа картинки на экране до вычислений в калькуляторе — это просто комбинации этих двух состояний.
Почему именно 0 и 1? Потому что так проще всего работать с электричеством. Но как из этих двух цифр получаются все числа, буквы и даже видео? Давайте разберёмся.
Двоичная система — это способ записи чисел с помощью всего двух цифр: 0 и 1. В отличие от десятичной системы (где есть цифры 0–9), здесь каждая позиция числа означает не степень десятки, а степень двойки.
- В десятичной системе: 13=1*10^1+3*10^0
- В двоичной системе: 1101=1*2^3 + 1*2^2 + 0*2^1 + 1*2^0
А давайте теперь попробуем перевести десятичное число в двоичное. Есть простой метод — деление на 2 с записью остатков.
Пример: Переведём число 10 в двоичную систему.
- Делим 10 на 2:
10 ÷ 2 = 5 (остаток 0).
5 ÷ 2 = 2 (остаток 1).
2 ÷ 2 = 1 (остаток 0).
1 ÷ 2 = 0 (остаток 1). - Записываем остатки снизу вверх: 1010.
Итог: 10 (десятичное) = 1010 (двоичное).
А теперь обратно, двоичное в десятичное. Просто умножаем каждую цифру на 2 в степени её позиции (справа налево, начиная с 0).
Пример: Переведtм 1101 в десятичную систему.
Нумеруем разряды справа налево:
- 1 (позиция 3) → 1*2^3=8
- 1 (позиция 2) → 1*2^2=4
- 0 (позиция 1) → 0*2^1=0
- 1 (позиция 0) → 1*2^0=1
Складываем результаты: 8 + 4 + 0 + 1 = 13
Итог: 1101 (двоичное) = 13 (десятичное).
Десятичное число (например, 5) можно записать в двоичном виде по-разному:
- 101 (3 бита)
- 00000101 (8 бит)
- 0000000000000101 (16 бит)
Разница возникает из-за разрядности (количества бит, которые система выделяет под число). Давайте разберемся, почему так происходит и как выбрать правильное представление. Количество бит зависит от:
- Естественной минимальной длинны. Число 5 в чистой двоичной системе действительно равно 101 (3 бита). Это минимальное представление, где нет лидирующих нулей.
- Выравнивание под стандартные форматы. Компьютеры работают не с отдельными битами, а с фиксированными блоками: 8 бит (1 байт) — минимальная адресуемая единица: 16/32/64 бита — типовые размеры для процессоров. Поэтому число 5 часто дополняют нулями: Как 00000101 (8 бит), если оно часть байта. Как 0000000000000101 (16 бит), если хранится в двухбайтовой ячейке памяти.
Правильное представление зависит от контекста:
Оптимальное хранение
Если важно сэкономить место (например, в архивах или сетевых пакетах), используют минимально необходимое количество бит:
- Число 5 → 101 (3 бита).
Совместимость с архитектурой
Процессоры работают с фиксированными размерами, поэтому:
- Данные в оперативной памяти выравниваются по байтам (8, 16, 32 бита).
- Число 5 в 8-битном формате → 00000101.
Представление текста или инструкций
- В кодировке ASCII символ с кодом 5 (ENQ) всегда занимает 8 бит. О кодировках мы скоро поговорим.
- В машинных командах число 5 как аргумент может быть 4, 8 или 16 бит в зависимости от архитектуры.
Правило для определения количества бит:
Количество бит должно соответствовать формату данных или разрядности системы.
- Если число хранится в байте (8 бит):
5 → 00000101 (дополняется нулями слева).
Максимальное число в 8 битах — 255 (11111111). - Если это поле в сетевом пакете:
Может быть указано в спецификации протокола (например, «поле длиной 4 бита»).
Тогда 5 → 0101.
Но почему всегда не использовать минимум бит? Все это из-за:
- Производительности: Процессорам проще обрабатывать выровненные данные.
- Стандартов: Файловые форматы и протоколы требуют фиксированной разрядности.
- Однозначность: 101 может быть числом 5 или, например, кодом операции, если длина не зафиксирована.
Шестнадцатиричная система (0-9, A-F)
Мы уже знаем, что компьютер «думает» в двоичной системе, а значит, внутри всё состоит из длинных цепочек нулей и единиц. Но есть проблема: такие цепочки неудобно читать человеку. Например: 1010110010101111
Это всего одно 16-битное число, но для глаз это сплошной «лес» из нулей и единиц. Тут-то на помощь и приходит шестнадцатеричная система счисления — друг программиста и электронщика.
В шестнадцатеричной системе основание 16. Это значит, что у нас есть 16 разных символов для записи чисел. Первые 10 — это привычные нам цифры 0–9, а оставшиеся 6 — буквы A, B, C, D, E, F, которые обозначают числа от 10 до 15.
Каждая шестнадцатеричная цифра соответствует ровно 4 двоичным битам. Это значит, что мы можем легко преобразовать длинную двоичную запись в короткую шестнадцатеричную, просто группируя биты по четыре. Пример: 10101100 на две группы 1) 1010 и 2) 1100. Теперь заменим каждую группу на её шестнадцатеричный символ: 1010 = A_{16}, 1100 = C_{16}
Получаем: 10101100_2 = AC_{16}
Переведём двоичное число 111100001010 в шестнадцатеричную систему.
Шаг 1: Разбиваем на группы по 4 бита (справа налево)
Дополняем число нулями слева, если нужно:
- Исходное: 111100001010
- Разбиваем: 1111 0000 1010
Шаг 2: Переводим каждую группу
Используем таблицу соответствий шестнадцатеричной системы.
Шаг 3: Собираем результат
- 1111 = F
- 0000 = 0
- 1010 = A
Итог: 111100001010 (двоичное) = F0A (шестнадцатеричное).
Для человека читать двоичный код — мучение, а шестнадцатеричная система делает это удобным и наглядным. Но для компьютера разницы нет: он всё равно всё хранит в двоичном виде. Шестнадцатеричная запись — это просто способ перевода, чтобы мы могли лучше понимать, что внутри.
Спасибо за внимание!
Следующий урок: Как работает компьютер? Часть 17. Кодировки.
P.S.
Если вы теперь смотрите на свой телефон или ноутбук не как на бездушную железку, а как на клубок молний, который научили думать, — вам понравится мой курс «Как работает компьютер. Просто о сложном» https://stepik.org/a/249383. Специально для Дзен действует промокод со скидкой 20%: DZEN20.
👍 Ставьте лайки если хотите разбор других интересных тем.
👉 Подписывайся на IT Extra на Дзен чтобы не пропустить следующие статьи
Если вам интересно копать глубже, разбирать реальные кейсы и получать знания, которых нет в открытом доступе — вам в IT Extra Premium.
Что внутри?
✅ Закрытые публикации: Детальные руководства, разборы сложных тем (например, архитектура высоконагруженных систем, глубокий анализ уязвимостей, оптимизация кода, полезные инструменты и объяснения сложных тем простым и понятным языком).
✅ Конкретные инструкции: Пошаговые мануалы, которые вы сможете применить на практике уже сегодня.
✅ Без рекламы и воды: Только суть, только концентрат полезной информации.
✅ Ранний доступ: Читайте новые материалы первыми.
Это — ваш личный доступ к экспертизе, упакованной в понятный формат. Не просто теория, а инструменты для роста.
👉 Переходите на Premium и начните читать то, о чем другие только догадываются.
👇
Понравилась статья? В нашем Telegram-канале ITextra мы каждый день делимся такими же понятными объяснениями, а также свежими новостями и полезными инструментами. Подписывайтесь, чтобы прокачивать свои IT-знания всего за 2 минуты в день!