
Системы счисления: основания, виды и перевод чисел
Одно и то же количество можно записать четырьмя разными строками: 202, 11001010, 312 и CA. Это не четыре разных числа, а одно, записанное в десятичной, двоичной, восьмеричной и шестнадцатеричной системах счисления. Количество яблок от способа записи не меняется — меняется алфавит цифр и правила, по которым знаки складываются в значение.
Разница между системами кажется школьной абстракцией ровно до того момента, когда вы открываете hex-дамп файла, настраиваете права на сервере командой chmod 755 или подбираете цвет #1A73E8. Тогда выясняется, что все эти записи про одно и то же и что перевод между ними занимает пятнадцать секунд, если знать правило.
Этот материал — карта темы: что такое основание, чем позиционные системы отличаются от непозиционных, зачем понадобилось сразу несколько оснований и как переводить числа между ними без калькулятора. Глубокий разбор двоичного кода и hex вынесен в отдельные статьи, ссылки стоят в соответствующих разделах, а место систем счисления среди прочих способов записи данных показано в обзоре про кодирование информации.
Что такое система счисления и её основание
Система счисления — это способ записывать числа знаками по фиксированным правилам. У любой системы есть две составляющие: алфавит цифр и правило, по которому из этих цифр собирается значение.
Основание системы счисления — это количество различных цифр в её алфавите. В десятичной их десять: от 0 до 9. В двоичной две: 0 и 1. В восьмеричной восемь: от 0 до 7. В шестнадцатеричной шестнадцать, и поскольку привычных цифр не хватает, шесть последних значений записывают латинскими буквами A, B, C, D, E, F. Общее правило: в системе с основанием b используются цифры от 0 до b−1, а знаки со значением b и выше невозможны в ней в принципе — запись 89 в восьмеричной системе такая же ошибка, как буква Ж в номере телефона.
Второе правило — вес разряда. В позиционной системе значение цифры зависит от места, на котором она стоит: каждый следующий разряд слева весит в b раз больше предыдущего. Число собирается как сумма произведений «цифра × вес»:
значение = d₀·b⁰ + d₁·b¹ + d₂·b² + …
Для десятичного числа это очевидно: 4728 = 4·1000 + 7·100 + 2·10 + 8·1, веса разрядов — степени десятки. Та же механика работает в любой системе, меняется только основание: двоичное 1011 = 8 + 2 + 1 = 11, шестнадцатеричное 2F = 2·16 + 15 = 47.
Из формулы вытекает практичное следствие: максимальное число, которое влезает в n разрядов системы с основанием b, равно bn − 1. Восемь двоичных разрядов дают 2⁸ − 1 = 255. Три десятичных — 999. Две шестнадцатеричные цифры — тоже 255, и это совпадение не случайно: два hex-разряда покрывают ровно один байт.
Основание принято указывать индексом или префиксом, иначе запись двусмысленна: 101 может означать сто один, а может — пять. Пишут 101₂ или 0b101 для двоичной, 0o755 для восьмеричной, 0x1F или #1F для шестнадцатеричной.
Позиционные и непозиционные системы счисления
Все системы делятся на два больших класса, и различие между ними не косметическое: от него зависит, можно ли вообще считать столбиком.
Непозиционные системы — те, где вклад знака в число не зависит от его места. Простейший пример — унарная: пять палочек означают пять, десять палочек — десять, порядок неважен. Так до сих пор считают дни и голоса в маленьких комиссиях. Наглядно, но записать этим способом население города физически невозможно.
Классический пример посложнее — римские цифры. I, V, X, L, C, D, M имеют фиксированные значения 1, 5, 10, 50, 100, 500, 1000, и число собирается сложением: XXVII = 10 + 10 + 5 + 1 + 1 = 27. Правило вычитания для соседних пар (IX — это 9, XI — 11) делает систему не вполне непозиционной, но разряда в степенном смысле в ней нет: X значит десять и в начале записи, и в конце. Ключевая беда — отсутствие нуля и, как следствие, невозможность нормальной арифметики: попробуйте умножить MCMXLVII на XXIII столбиком. Именно поэтому в средневековой Европе счётом занимались отдельные специалисты с абаком. К непозиционным относят и алфавитные системы — греческую, кириллическую (буквы с титлом), еврейскую.
Позиционные системы устроены иначе: значение цифры умножается на вес разряда. Их изобретение потребовало нуля — знака для пустого разряда, который отличает 105 от 15. Первой полноценной позиционной системой считают вавилонскую шестидесятеричную (основание 60), и её наследие живо до сих пор: 60 секунд в минуте, 60 минут в часе, 360 градусов в окружности. У майя была двадцатеричная система, у некоторых народов — пятеричная. Все они позиционные и все они работают по одной формуле, отличаясь только числом b.
Зачем понадобилось несколько оснований сразу
Раз любое число записывается в любой системе, законен вопрос: зачем держать их несколько. Ответ в том, что у каждого основания свой набор компромиссов и ни одно не выигрывает сразу по всем.
Основных осей три. Длина записи: чем меньше основание, тем длиннее строка — число 202 занимает три знака в десятичной, три в восьмеричной, два в шестнадцатеричной и восемь в двоичной. Размер алфавита: чем больше основание, тем больше знаков надо помнить и тем легче их спутать — системе с основанием 60 нужно шестьдесят различимых символов. Надёжность носителя: чем меньше состояний различает физический элемент, тем устойчивее он к помехам, износу и нагреву.
Отсюда все практические решения. Технике критична надёжность, поэтому она берёт минимально возможное основание 2 и мирится с длинной записью — ей безразлично, сколько разрядов гонять. Человеку важнее короткая запись и привычный алфавит, поэтому в быту живёт десятка. Программисту нужно и то и другое: коротко, но без потери двоичной структуры — отсюда 16.
Четвёртая ось, про которую вспоминают реже, — делимость основания: чем больше у него делителей, тем больше простых дробей записывается конечно. Двенадцать делится на 2, 3, 4 и 6, поэтому товар удобно считать дюжинами, а сутки поделены на 12 и 24 части. Шестьдесят делится на 2, 3, 4, 5, 6, 10, 12, 15, 20 и 30 — отсюда вавилонские минуты и градусы, дожившие до наручных часов.
Общий вывод: основание — свойство не числа, а его записи. Двести два яблока остаются двумястами двумя, как их ни запиши, а выбор основания решает лишь одно: насколько удобно работать с записью конкретному исполнителю — человеку, транзистору или сканеру.
Десятичная система счисления: почему прижилась именно она
Десятичная система — та, которой вы пользуетесь ежедневно, не задумываясь о её устройстве. Основание 10, цифры 0–9, веса разрядов — единицы, десятки, сотни, тысячи.
Причина её господства анатомична: десять пальцев на руках. Народы, считавшие пальцами обеих рук, пришли к десятке; те, кто считал и на ногах, — к двадцати (следы во французском quatre-vingts, «четырежды двадцать» для 80). Математического преимущества у десятки нет: она делится нацело только на 2 и 5.
Современный вид десятичная запись приобрела в Индии в первых веках нашей эры: там появились и начертания цифр, и, что важнее, позиционный ноль. В Европу она пришла через арабских математиков — одним из первых её всерьёз пропагандировал Леонардо Пизанский (Фибоначчи) в «Liber Abaci» 1202 года.
Двоичная: два состояния и язык техники
Основание 2, цифры 0 и 1, веса разрядов — степени двойки: 1, 2, 4, 8, 16, 32, 64, 128. Пример: 202 записывается как 11001010, потому что 128 + 64 + 8 + 2 = 202.
Применяется везде, где данные хранятся и передаются физически: процессоры, память, диски, каналы связи, штрихи линейного кода и тёмные модули QR. Причина одна — надёжность: два состояния (есть напряжение или нет, транзистор открыт или закрыт) схема различает с огромным запасом по помехам, и сигнал может просесть вдвое, а читаться будет однозначно. Отсюда же вся привычная компьютерная арифметика: разряд — это бит, восемь бит — байт с диапазоном значений от 0 до 255.
Как читать двоичную запись вручную, чем в ней кодируются буквы, почему в байте именно восемь бит и как двоичный код связан с таблицей символов — в отдельном разборе про двоичный код простыми словами. В карте темы двоичная система нужна как опора: через неё проще всего переводить числа между всеми остальными.
Восьмеричная система: где она осталась жива
Восьмеричная система использует цифры 0–7 и веса, растущие степенями восьмёрки: 1, 8, 64, 512. Число 202 в ней записывается как 312, потому что 3·64 + 1·8 + 2 = 202.
Главное достоинство восьмеричной записи — родство с двоичной. Восемь это 2³, поэтому каждая восьмеричная цифра ровно соответствует трём двоичным разрядам: 11001010 разбивается справа на триады 011 001 010, и каждая заменяется цифрой — 3, 1, 2. Никаких делений столбиком.
Расцвет системы пришёлся на 1960–1970-е с их машинами со словами в 12, 24 и 36 бит: все эти числа делятся на три. Когда индустрия перешла на слова, кратные четырём, восьмеричную потеснила шестнадцатеричная.
Одна ниша осталась за восьмеричной навсегда — права доступа в Unix-подобных системах. Команда chmod 755 читается так: три группы прав (владелец, группа, остальные), в каждой три бита — чтение, запись, выполнение. Семёрка — это 111, все три права. Пятёрка — 101, чтение и выполнение без записи. Восьмеричная цифра здесь не абстракция, а буквально упаковка трёх флагов в один знак.
Сравнение с шестнадцатеричной сводится к арифметике удобства. Восьмеричная цифра несёт три бита, шестнадцатеричная — четыре. Байт делится на четыре без остатка, а на три — нет, поэтому в восьмеричной записи байт занимает три цифры, из которых старшая принимает всего четыре значения: максимум 255 выглядит как 377. Такая запись не выровнена по границе байта и потому неудобна для дампов. Там же, где данные изначально бьются на тройки битов, восьмеричная остаётся короче и точнее любой альтернативы.
В коде у восьмеричной есть ловушка: в языке C и его наследниках ведущий ноль означает именно её, поэтому литерал 010 равен восьми. На этом спотыкаются при разборе дат, где 08 и 09 вообще не являются корректными восьмеричными числами. Современные языки перешли к однозначному префиксу 0o.
Шестнадцатеричная: hex для байтов, адресов и цветов
Основание 16, цифры 0–9 и далее A, B, C, D, E, F со значениями от 10 до 15, веса разрядов — 1, 16, 256, 4096. Пример: 202 записывается как CA, потому что C это 12, и 12·16 + 10 = 202.
Ниша задана одним свойством: 16 = 2⁴, поэтому одна hex-цифра равна четырём двоичным разрядам, а байт — ровно двум hex-цифрам. Отсюда и вездесущность hex там, где на данные смотрят побайтово: адреса памяти (0x7FFE0000), MAC-адреса сетевых карт, дампы файлов, коды ошибок вида 0x80070005, контрольные суммы и хеши, номера символов Unicode (U+263A), цвета в вебе (#FF5733 — три байта, по одному на красный, зелёный и синий каналы).
Почему выбрали именно буквы A–F, как читать hex-дамп, что означает решётка перед кодом цвета и как считать hex в уме — в отдельном материале про шестнадцатеричную систему счисления. Для карты темы достаточно запомнить главное: hex — это не отдельный мир, а тот же двоичный код, сжатый вчетверо для человеческих глаз.
Сравнение четырёх систем в одной таблице
Сначала характеристики систем, затем одни и те же значения бок о бок.
| Система | Основание | Цифры | Префикс | Одна цифра | Где применяется |
|---|---|---|---|---|---|
| Двоичная | 2 | 0, 1 | 0b | 1 бит | Вся вычислительная техника, биты и байты, логика |
| Восьмеричная | 8 | 0–7 | 0o | 3 бита | Права доступа chmod, старые ЭВМ с 12/36-битным словом |
| Десятичная | 10 | 0–9 | — | около 3,32 бита | Повседневный счёт, деньги, измерения, штрих-коды |
| Шестнадцатеричная | 16 | 0–9, A–F | 0x или # | 4 бита | Дампы, адреса памяти, MAC, цвета, хеши |
Первые значения во всех четырёх системах сразу. Строка с числом 202 годится как контрольная при проверке своих расчётов.
| Десятичная | Двоичная | Восьмеричная | Шестнадцатеричная |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 2 | 10 | 2 | 2 |
| 8 | 1000 | 10 | 8 |
| 10 | 1010 | 12 | A |
| 15 | 1111 | 17 | F |
| 16 | 10000 | 20 | 10 |
| 202 | 11001010 | 312 | CA |
| 255 | 11111111 | 377 | FF |
Обратите внимание на строку с числом 16: в шестнадцатеричной оно записывается как 10, а восьмёрка в восьмеричной — тоже как 10. Это общее свойство: в любой системе с основанием b число b записывается как «10». Запись 10 сама по себе не значит «десять» — она значит «основание».
Как переводить числа между системами счисления
Переводов ровно четыре типа, и каждый решается своим приёмом. Калькулятор не нужен ни в одном.
Из любой системы в десятичную
Разложите число по разрядам и сложите произведения «цифра × вес». Веса — степени основания, начиная справа с нулевой.
Примеры: двоичное 11001010 даёт 128 + 64 + 8 + 2 = 202, шестнадцатеричное 2F — 2·16 + 15 = 47, восьмеричное 312 — 3·64 + 1·8 + 2 = 202.
Для длинных чисел удобнее схема Горнера: идём слева направо, на каждом шаге умножаем накопленное на основание и прибавляем очередную цифру. Для восьмеричного 312: 3 → 3·8+1 = 25 → 25·8+2 = 202. Степени основания помнить не нужно.
Из десятичной в любую другую
Метод деления с остатком. Делим число на основание, записываем остаток, частное снова делим на основание — и так до нуля. Затем читаем остатки снизу вверх.
Переведём 202 в двоичную: 202 : 2 = 101, остаток 0; 101 : 2 = 50, остаток 1; 50 : 2 = 25, остаток 0; 25 : 2 = 12, остаток 1; 12 : 2 = 6, остаток 0; 6 : 2 = 3, остаток 0; 3 : 2 = 1, остаток 1; 1 : 2 = 0, остаток 1. Читаем остатки в обратном порядке: 11001010.
То же число в шестнадцатеричную: 202 : 16 = 12, остаток 10 (это A); 12 : 16 = 0, остаток 12 (это C). Снизу вверх — CA. В восьмеричную: 202 : 8 = 25, остаток 2; 25 : 8 = 3, остаток 1; 3 : 8 = 0, остаток 3. Получаем 312.
Между двоичной, восьмеричной и шестнадцатеричной
Самый быстрый случай: 8 и 16 — степени двойки, поэтому вместо делений работают группировки.
- Двоичная в восьмеричную: разбиваем двоичную запись на тройки цифр справа налево, недостающие разряды слева дополняем нулями, каждую тройку заменяем одной восьмеричной цифрой. 11001010 → 011 001 010 → 3 1 2 → 312.
- Двоичная в шестнадцатеричную: то же самое, но группами по четыре. 11001010 → 1100 1010 → C A → CA.
- Обратно — просто разворачиваем каждую цифру в тройку или четвёрку двоичных разрядов. F → 1111, 7 → 111.
- Из восьмеричной в шестнадцатеричную напрямую не переводят: сначала разворачивают в двоичную, потом собирают тетрадами. Двоичная работает мостом.
Между двумя произвольными системами
Если основания не связаны степенью — скажем, из пятеричной в семеричную, — прямого правила нет: переводят через промежуточную систему, в которой вы умеете считать. На бумаге это десятичная. Сначала разложить число по разрядам и получить десятичное значение, затем поделить его с остатком на новое основание.
Пример: перевести 2431 из пятеричной в семеричную. Шаг первый, в десятичную: 2·125 + 4·25 + 3·5 + 1 = 250 + 100 + 15 + 1 = 366. Шаг второй, деление на 7: 366 : 7 = 52, остаток 2; 52 : 7 = 7, остаток 3; 7 : 7 = 1, остаток 0; 1 : 7 = 0, остаток 1. Читаем снизу вверх — 1032. Проверка обратным ходом: 1·343 + 0·49 + 3·7 + 2 = 366.
Исключение — пары оснований, где одно является степенью другого: из четверичной в шестнадцатеричную переходят группировкой по две цифры (4² = 16), из двоичной в восьмеричную — по три. А между восьмеричной и шестнадцатеричной группировка напрямую не работает: они не степени друг друга, только обе степени двойки, поэтому мостом служит двоичная.
Дробные числа
Целая и дробная части переводятся по разным правилам: для дробной вместо деления используют умножение на основание — умножаем, целую часть результата забираем в очередной разряд, дробную умножаем снова.
Переведём 0,625 в двоичную: 0,625·2 = 1,25 (забираем 1); 0,25·2 = 0,5 (забираем 0); 0,5·2 = 1,0 (забираем 1). Читаем сверху вниз, в этом случае именно сверху: 0,101.
Здесь прячется причина известного недоразумения: дробь 0,1 в двоичной системе бесконечна и периодична, как треть в десятичной. Компьютер хранит её приближённо, поэтому 0.1 + 0.2 в большинстве языков даёт 0.30000000000000004. Это не баг реализации, а следствие несовместимости оснований 10 и 2 — денежные расчёты поэтому ведут в целых копейках или в десятичных типах.
Типичные ошибки перевода и быстрые проверки
Ошибки при переводе однотипны, и почти все они ловятся за секунды.
- Остатки прочитаны сверху вниз. При делении с остатком результат читается снизу вверх, от последнего остатка к первому. Прочитанное наоборот число выглядит правдоподобно и потому особенно опасно: вместо 11001010 получается 01010011.
- Группировка начата слева. Двоичную запись бьют на триады и тетрады строго справа налево, дополняя нулями старший конец. Разбив 11001010 слева, вы получите 110 010 10 и неверный результат.
- Пропущен нулевой разряд. Ноль в середине числа держит вес: 1001 и 101 отличаются вчетверо, а пропуск нулевой позиции сдвигает все старшие веса.
- Спутаны похожие знаки. В hex путают 0 и O, 1 и I, а B принимают за суффикс байта. Ошибка в одном знаке hex-строки — это ошибка сразу в четырёх битах.
- Потеряно основание. Записав промежуточный результат без префикса, легко через минуту прочитать 101 как сто один вместо пяти. Помечайте черновики.
Признаки, по которым ошибка видна сразу, без пересчёта:
- Недопустимая цифра. В восьмеричном числе не может быть 8 или 9, в двоичном — ничего кроме 0 и 1, в шестнадцатеричном — букв дальше F. Запись 0x1G бессмысленна.
- Чётность. Если двоичное число заканчивается на 0, оно чётное; на 1 — нечётное. Аналогично в шестнадцатеричной: последняя цифра 0, 2, 4, 6, 8, A, C, E — число чётное.
- Порядок величины. Одно значение занимает в двоичной примерно в 3,3 раза больше разрядов, чем в десятичной, и ровно вчетверо больше, чем в шестнадцатеричной. Двоичная запись короче десятичной — где-то ошибка.
И общее правило: любой перевод проверяется обратным. Перевели 202 в CA — соберите обратно 12·16 + 10. Две секунды экономят час поиска ошибки в дампе.
Системы счисления в штрих-кодах и QR-кодах
Тема выглядит академической, пока не доходит до кодирования данных: любой штриховой или матричный код — это в конечном счёте число, записанное в подходящем основании.
Линейные коды розницы работают в десятичной системе: EAN-13 хранит тринадцать десятичных цифр, последняя из которых вычисляется по остатку от деления на 10. Как устроена эта проверка и что означает каждая группа цифр — разобрано в материале про то, что означают цифры на штрих-коде. Сами полосы при этом двоичные: широкая и узкая линия, тёмный и светлый модуль — те же ноль и единица, только оптические.
QR-код выбирает основание под тип данных, чтобы экономить место: в цифровом режиме он упаковывает три десятичные цифры в 10 бит, в буквенно-цифровом — два символа в 11 бит, а в байтовом тратит полновесные 8 бит на символ. Строка из одних цифр помещается в код почти втрое компактнее, чем та же строка побайтово, поэтому короткая ссылка из цифр и латиницы даёт менее плотный узор, чем длинный URL с кириллицей. Разницу видно в нашем генераторе QR-кодов: наберите десять цифр, потом десять русских букв и сравните сетку.
На поверхность выходит и hex: цвет модулей и фона задаётся кодом вида #1A73E8, и от разницы яркости между этими двумя числами напрямую зависит, считается код или нет. Слишком близкие по яркости пары ломают распознавание, каким бы верным ни было содержимое кода.
Шпаргалка по всей теме
- Основание — количество цифр системы; сами цифры идут от 0 до b−1.
- В позиционной системе вес разряда — степень основания; в римской и унарной веса нет.
- Десятичная прижилась из-за пальцев, техника считает в двоичной из-за надёжности двух уровней сигнала.
- Восьмеричная — это двоичная по триадам, шестнадцатеричная — по тетрадам; байт равен ровно двум hex-цифрам.
- В десятичную переводят суммой «цифра × вес», из десятичной — делением с остатком и чтением остатков снизу вверх; между 2, 8 и 16 — группировкой разрядов.
- Дробную часть переводят умножением на основание; 0,1 в двоичной бесконечна, отсюда 0.1 + 0.2 ≠ 0.3.
- Любой перевод проверяется обратным за пару секунд.
Частые вопросы
Какие бывают системы счисления и чем они отличаются?
Системы счисления делятся на два класса. Непозиционные — те, где значение знака не зависит от его места в записи: унарная система палочек, римские цифры, алфавитные системы вроде греческой и старославянской с титлами. В них нет нуля и нет разрядов, поэтому арифметика столбиком невозможна, а длинные числа записываются громоздко. Позиционные — те, где каждый следующий разряд весит в основание раз больше предыдущего: вавилонская шестидесятеричная, двадцатеричная у майя и все системы, которыми пользуются сегодня. Практически значимых позиционных систем четыре: десятичная с основанием 10 для повседневного счёта, двоичная с основанием 2 для вычислительной техники, восьмеричная с основанием 8 для прав доступа в Unix, шестнадцатеричная с основанием 16 для дампов памяти, MAC-адресов, цветов и хешей. Отличаются они только основанием, а правило сборки значения у всех одно: сумма произведений цифры на степень основания.
Как перевести число из одной системы счисления в другую?
Способ зависит от направления. Чтобы перевести в десятичную, разложите число по разрядам и сложите произведения «цифра × вес разряда», где веса — степени основания начиная справа с единицы. Двоичное 11001010 даёт 128 + 64 + 8 + 2 = 202; шестнадцатеричное CA даёт 12·16 + 10 = 202. Чтобы перевести из десятичной в любую другую, делите число на основание с остатком, частное снова делите, и так до нуля, а затем прочитайте остатки снизу вверх: для 202 в двоичную остатки идут 0, 1, 0, 1, 0, 0, 1, 1, и в обратном порядке это 11001010. Самая частая ошибка — прочитать их сверху вниз и получить зеркальное число. Переводы между двоичной, восьмеричной и шестнадцатеричной делаются без вычислений: запись группируют по три разряда справа для восьмеричной и по четыре для шестнадцатеричной, недостающее слева дополняют нулями. Так 11001010 разбивается на 011 001 010 (312) или на 1100 1010 (CA). Между произвольными основаниями идут через десятичную, а результат проверяют обратным переводом.
Какие системы счисления используются на практике чаще всего?
В повседневных расчётах — десятичная, она же единственная, которой обучают в школе как основной. Внутри техники работает двоичная: два состояния сигнала различаются надёжнее любых промежуточных градаций, и подробный разбор этого выбора есть в материале про двоичный код.
Шестнадцатеричная нужна там, где двоичная запись становится нечитаемо длинной: дампы памяти, цвета в вёрстке, адреса устройств. Восьмеричная сохранилась в правах доступа файловых систем Unix — три бита ровно ложатся в одну восьмеричную цифру. Остальные основания встречаются в специальных задачах: троичная логика в экспериментальных машинах, шестидесятеричная в измерении времени и углов, двенадцатеричная в торговых мерах. Выбор основания всегда компромисс между длиной записи и удобством арифметики.
Зачем нужны восьмеричная и шестнадцатеричная системы, если техника всё равно работает в двоичной?
Они нужны не машине, а человеку. Двоичная запись правильная, но нечитаемая: адрес памяти или содержимое сектора диска превращаются в ленту из десятков нулей и единиц, в которой глаз теряет позицию через секунду. Восьмёрка и шестнадцать — степени двойки, 2³ и 2⁴, поэтому перевод в них не требует вычислений: разряды просто группируются по три или по четыре, информация не теряется, а запись становится короче в три-четыре раза. Шестнадцатеричная выиграла конкуренцию, потому что машинные слова кратны четырём битам: байт — ровно две hex-цифры, 32-битное число — ровно восемь. Восьмеричная ложилась на старые машины со словами в 12, 24 и 36 бит и осталась в одной массовой нише — правах доступа Unix, где каждая цифра chmod упаковывает три флага в один знак: 7 это 111, 5 это 101.
Что такое основание системы счисления?
Основание — это количество различных цифр, которыми система пользуется, и одновременно коэффициент, во сколько раз каждый следующий разряд весит больше предыдущего. У десятичной системы основание 10: цифр десять, веса разрядов — единицы, десятки, сотни, тысячи. У двоичной основание 2: цифр две, веса — 1, 2, 4, 8, 16. У шестнадцатеричной основание 16, и поскольку привычных знаков не хватает, шесть последних записывают буквами A–F со значениями от 10 до 15. Из определения следуют два правила. Первое: в системе с основанием b невозможны цифры со значением b и выше, поэтому запись 98 в восьмеричной ошибочна, а 0x1G бессмысленна. Второе: максимальное число, помещающееся в n разрядов, равно b в степени n минус один — восемь двоичных разрядов дают 255, две шестнадцатеричные цифры тоже 255, три десятичных 999. Есть и красивое следствие: в любой системе само основание записывается как «10», поэтому запись 10 без указания основания ничего конкретного не означает.
Почему в разных странах прижились разные системы и откуда взялась десятичная?
Основание почти всегда возникало из способа считать телом. Десятка пришла от десяти пальцев на руках, двадцатеричные системы (у майя, а также следы во французском счёте, где 80 звучит как «четырежды двадцать») — от пальцев рук и ног вместе, пятеричные — от одной руки. Вавилонская шестидесятеричная, скорее всего, выросла из счёта фалангами пальцев одной руки с отметкой пятёрок другой, и её наследие пережило саму цивилизацию: 60 секунд в минуте, 60 минут в часе, 360 градусов в окружности. Современный вид десятичной записи сложился в Индии в первых веках нашей эры, где появились не только начертания цифр, но и позиционный ноль — знак для пустого разряда, без которого 105 неотличимо от 15. Через арабских математиков система пришла в Европу, и одним из главных её популяризаторов стал Леонардо Пизанский, известный как Фибоначчи. Математических преимуществ у десятки нет: она делится нацело только на 2 и 5, а двенадцатеричная система в этом смысле удобнее.