Одно и то же количество можно записать несколькими способами: 202, 11001010, 312 и CA. Это не четыре разных числа, а одно и то же значение, записанное в десятичной, двоичной, восьмеричной и шестнадцатеричной системах счисления. Меняется способ записи, набор допустимых символов и правила, по которым определяется значение каждого разряда.
На практике системы счисления встречаются гораздо чаще, чем может показаться. Двоичная запись лежит в основе работы компьютеров, шестнадцатеричная используется при работе с дампами и адресами памяти, восьмеричная знакома разработчикам Unix-систем по правам доступа, а десятичная остается основной для повседневных расчетов. Даже цвет на веб-странице может быть записан в шестнадцатеричном виде, например #1A73E8.
В этой статье разберем, что такое система счисления и ее основание, чем позиционные системы отличаются от непозиционных, зачем используются разные основания и как переводить числа между ними. Отдельно рассмотрим применение систем счисления в штрих-кодах и QR-кодах.
Система счисления - это способ записи чисел с помощью определенного набора символов и правил их использования.
У позиционной системы есть две основные характеристики: алфавит цифр и основание. Основание показывает, сколько разных цифр используется в системе. В десятичной системе десять цифр - от 0 до 9, в двоичной две - 0 и 1, в восьмеричной восемь - от 0 до 7, в шестнадцатеричной шестнадцать - от 0 до 9 и от A до F.
В системе с основанием b допустимы цифры от 0 до b-1. Поэтому в восьмеричной системе невозможно записать число 89: цифр 8 и 9 в ее алфавите нет.
Главное свойство позиционной системы заключается в том, что значение цифры зависит от ее положения. Каждый следующий разряд слева имеет вес, в b раз больший предыдущего. Число можно представить как сумму произведений цифр на степени основания:
значение = d₀·b⁰ + d₁·b¹ + d₂·b² + …
Для десятичного числа 4728 это выглядит так:
4728 = 4·1000 + 7·100 + 2·10 + 8·1
В двоичной системе основание равно 2:
1011₂ = 1·8 + 0·4 + 1·2 + 1·1 = 11
В шестнадцатеричной:
2F₁₆ = 2·16 + 15 = 47
Из этого правила следует еще одно полезное свойство. Максимальное число, которое можно представить с помощью n разрядов в системе с основанием b, равно:
bⁿ - 1
Поэтому восемь двоичных разрядов позволяют записать значения от 0 до 255. Две шестнадцатеричные цифры покрывают тот же диапазон, поскольку 16² = 256.
Чтобы не путать одинаковые записи из разных систем, основание указывают индексом или специальным префиксом: 101₂ или 0b101 для двоичной системы, 0o755 для восьмеричной, 0x1F для шестнадцатеричной.
Системы счисления принято делить на позиционные и непозиционные.
В непозиционной системе значение символа не определяется его положением. Простой пример - унарная система, где пять палочек означают пять единиц. Порядок символов значения не меняет.
Другой известный пример - римские цифры. Символы I, V, X, L, C, D и M имеют фиксированные значения: 1, 5, 10, 50, 100, 500 и 1000. Число XXVII означает 27, а IX - 9.
Римская запись использует дополнительные правила, например вычитание меньшего значения из большего в отдельных сочетаниях. При этом в ней нет позиционных разрядов в привычном смысле и нет полноценного нуля. Это делает арифметические операции значительно менее удобными.
Позиционные системы устроены иначе. В них одна и та же цифра может иметь разное значение в зависимости от положения. Именно наличие нуля и разрядов позволяет выполнять привычные арифметические действия столбиком.
К ранним позиционным системам относится вавилонская шестидесятеричная система. Ее влияние сохранилось в современных единицах измерения: час содержит 60 минут, минута - 60 секунд, а полный круг составляет 360 градусов.
Разные культуры использовали и другие основания. Известны двенадцатеричная, двадцатеричная, пятеричная и другие системы. Математические правила для позиционных систем остаются одинаковыми, меняется только основание.
Любое число можно записать в любой позиционной системе, поэтому возникает вопрос: зачем вообще нужны разные основания?
Причина связана с удобством конкретной задачи. У разных систем различаются длина записи, количество используемых символов и связь с физическим представлением данных.
В двоичной системе запись получается длинной, зато используются всего два состояния. Для электронной техники это удобно, поскольку физическому устройству проще надежно различать два состояния сигнала.
Десятичная система удобна человеку. Она использует десять привычных цифр и исторически связана со счетом на пальцах. Математических оснований считать ее универсально лучшей системой нет.
Шестнадцатеричная система занимает промежуточное положение. В ней достаточно много символов, поэтому числа записываются короче, чем в двоичной системе. При этом основание 16 является степенью двойки, поэтому одна hex-цифра соответствует ровно четырем битам.
Восьмеричная система имеет аналогичное свойство: 8 = 2³, поэтому одна восьмеричная цифра соответствует трем битам.
Еще один важный фактор - делимость основания. Например, 12 имеет больше делителей, чем 10, поэтому некоторые дроби в двенадцатеричной системе записываются конечными. Шестидесятеричная система особенно удобна для измерения времени и углов.
Таким образом, выбор основания определяется задачей. Человеку важна удобная запись, компьютеру - надежное физическое представление данных, а программисту часто требуется компактная форма, сохраняющая связь с двоичной структурой.
Десятичная система имеет основание 10 и использует цифры от 0 до 9. Вес разрядов определяется степенями десятки: 1, 10, 100, 1000 и так далее.
Причину распространения десятичной системы обычно связывают с количеством пальцев на руках. Счет десятками закрепился в разных культурах, а затем стал частью привычной системы измерений и расчетов.
Современная десятичная запись сформировалась в Индии, где развивалась позиционная система с нулем. В Европу она пришла через арабских математиков и постепенно вытеснила более сложные способы записи чисел.
Сегодня десятичная система используется в денежных расчетах, измерениях, большинстве бытовых вычислений и во многих прикладных форматах данных.
Двоичная система имеет основание 2 и использует только 0 и 1. Вес разрядов увеличивается в два раза: 1, 2, 4, 8, 16, 32, 64 и так далее.
Например:
202₁₀ = 11001010₂
Проверка:
128 + 64 + 8 + 2 = 202
Двоичная система лежит в основе цифровой техники, поскольку физическим устройствам удобно работать с двумя различимыми состояниями. В электронике это может быть наличие или отсутствие определенного уровня сигнала, в памяти - одно из двух состояний ячейки.
Один двоичный разряд называется битом. Восемь бит образуют байт, который позволяет представить 256 различных значений - от 0 до 255.
Двоичная система также является удобным промежуточным языком для перевода между восьмеричной и шестнадцатеричной системами. Именно поэтому она остается фундаментальной для понимания представления данных в компьютерах.
Восьмеричная система использует цифры от 0 до 7. Вес разрядов определяется степенями восьмерки:
1, 8, 64, 512...
Например:
202₁₀ = 312₈
поскольку:
3·64 + 1·8 + 2 = 202
Особенность восьмеричной системы связана с тем, что 8 = 2³. Поэтому каждая восьмеричная цифра соответствует трем двоичным разрядам.
Например:
11001010₂ → 011 001 010 → 3 1 2 → 312₈
Такой способ записи активно применялся в вычислительной технике прошлого века, когда использовались машинные слова длиной 12, 24 или 36 бит.
Сегодня одно из наиболее известных применений восьмеричной системы - права доступа в Unix-подобных системах. Команда chmod 755 использует три восьмеричные цифры для трех групп пользователей.
Цифра 7 соответствует двоичному 111, то есть разрешениям на чтение, запись и выполнение. 5 соответствует 101 - чтению и выполнению.
В программировании также можно встретить восьмеричные литералы. Современная запись обычно использует префикс 0o, например 0o755.
Наша система сама подберет вам исполнителей на услуги, связанные с разработкой сайта или приложения, поисковой оптимизацией, контекстной рекламой, маркетингом, SMM и PR.
Заполнить заявку
13755 тендеров
проведено за восемь лет работы нашего сайта.
Шестнадцатеричная система имеет основание 16. После цифр от 0 до 9 используются буквы A, B, C, D, E и F, которые обозначают значения от 10 до 15.
Например:
202₁₀ = CA₁₆
потому что:
C·16 + A = 12·16 + 10 = 202
Главное преимущество hex связано с тем, что 16 = 2⁴. Одна шестнадцатеричная цифра соответствует четырем битам, а один байт - двум шестнадцатеричным цифрам.
Поэтому hex широко используется там, где необходимо компактно отображать двоичные данные: в дампах файлов, адресах памяти, MAC-адресах, контрольных суммах, хешах и кодах символов.
В веб-разработке шестнадцатеричная запись используется для цветов. Например, #FF5733 содержит значения трех цветовых каналов: красного, зеленого и синего.
Префикс 0x обычно указывает на шестнадцатеричное число в программном коде. В CSS распространена запись с символом #.

Теперь посмотрим на одни и те же значения в четырех системах:

Особенно полезно обратить внимание на число 16. В шестнадцатеричной системе оно записывается как 10. В восьмеричной число 8 тоже записывается как 10. Это общее правило: в любой системе с основанием b само основание записывается как 10.
Основных способов перевода несколько. Для целых чисел чаще всего используются разложение по степеням основания, деление с остатком и группировка двоичных разрядов.
Нужно умножить каждую цифру на соответствующую степень основания и сложить результаты.
Например:
11001010₂ = 1·128 + 1·64 + 0·32 + 0·16 + 1·8 + 0·4 + 1·2 + 0 = 202
Для восьмеричного числа:
312₈ = 3·64 + 1·8 + 2 = 202
Для шестнадцатеричного:
2F₁₆ = 2·16 + 15 = 47
Для длинных чисел можно использовать схему Горнера. Она позволяет обходиться без отдельного вычисления степеней основания. Например, для 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
Остатки читаются снизу вверх:
202₁₀ = 11001010₂
Для перевода в шестнадцатеричную систему:
202 : 16 = 12, остаток 10
10 обозначается буквой A, а 12 - буквой C. Читаем остатки снизу вверх и получаем CA.
Здесь перевод можно выполнить быстрее, поскольку 8 и 16 являются степенями двойки.
Для перевода из двоичной в восьмеричную запись разбиваем число на группы по три бита справа налево:
11001010 → 011 001 010 → 3 1 2
Получаем 312₈.
Для шестнадцатеричной системы используются группы по четыре:
11001010 → 1100 1010 → C A
Получаем CA₁₆.
Обратный перевод выполняется так же. Каждую восьмеричную цифру заменяем соответствующей тройкой битов, а каждую hex-цифру - четырьмя битами.
Если основания не связаны степенью, удобнее использовать промежуточную десятичную систему.
Например, для перевода 2431₅ в семеричную систему сначала получаем десятичное значение:
2·125 + 4·25 + 3·5 + 1 = 366
Затем делим 366 на 7 с остатком:
366 : 7 = 52, остаток 2
52 : 7 = 7, остаток 3
7 : 7 = 1, остаток 0
1 : 7 = 0, остаток 1
Читаем остатки снизу вверх:
2431₅ = 1032₇
Для дробной части используется другой алгоритм. Число последовательно умножают на новое основание, а целую часть результата записывают как очередной разряд.
Например, для 0,625 в двоичной системе:
0,625·2 = 1,25
0,25·2 = 0,5
0,5·2 = 1,0
Получаем:
0,625₁₀ = 0,101₂
При переводе дробей может возникнуть бесконечная периодическая запись. Например, десятичная дробь 0,1 не имеет конечного представления в двоичной системе. Компьютер поэтому хранит ее приближенно. Этим объясняется известный результат 0.1 + 0.2 = 0.30000000000000004 в некоторых языках программирования.
Большинство ошибок при переводе чисел связано с несколькими повторяющимися действиями.
Остатки прочитаны в неправильном порядке. При переводе из десятичной системы результат получают чтением остатков снизу вверх.
Двоичная запись неправильно разбита на группы. Для перехода в восьмеричную систему группы по три бита формируются справа налево. Для hex используются группы по четыре.
Пропущен нулевой разряд. Ноль внутри числа сохраняет позицию и вес следующих разрядов. Поэтому 1001₂ и 101₂ имеют совершенно разные значения.
Перепутаны символы в hex. В длинных строках легко спутать 0 и O, 1 и I. Одна ошибка в hex-цифре меняет сразу четыре бита.
Забыто основание. Запись 101 без обозначения системы неоднозначна. В десятичной это 101, в двоичной - 5.
Есть несколько быстрых способов проверить результат.
В двоичной системе последняя цифра определяет четность: 0 означает четное число, 1 - нечетное. В шестнадцатеричной системе четные числа заканчиваются на 0, 2, 4, 6, 8, A, C или E.
Также стоит проверять допустимость цифр. В двоичной системе не может быть цифры 2, в восьмеричной - 8 или 9, в шестнадцатеричной - символов после F.
Самая надежная проверка - выполнить обратный перевод. Если 202 перевели в CA, достаточно проверить:
12·16 + 10 = 202
Такой контроль занимает несколько секунд.
Системы счисления имеют непосредственное отношение к цифровому кодированию данных. Штрих-коды и QR-коды используют разные способы представления информации, чтобы разместить ее в ограниченной физической области.
Например, EAN-13 работает с тринадцатью десятичными цифрами. Последняя цифра является контрольной и вычисляется по определенному правилу.
В самом штрих-коде информация представлена оптически: темные и светлые элементы образуют последовательность состояний, которую считывает сканер.
QR-код использует несколько режимов кодирования в зависимости от содержимого. Для числовых данных применяется цифровой режим, для определенного набора символов - буквенно-цифровой, а для произвольных данных - байтовый.
В цифровом режиме три десятичные цифры кодируются 10 битами. В буквенно-цифровом два символа занимают 11 бит, а в байтовом режиме каждый символ обычно занимает 8 бит.
Поэтому одинаковое количество символов может занимать разный объем внутри QR-кода. Строка, состоящая только из цифр, кодируется эффективнее, чем произвольная последовательность символов.
Это можно проверить на практике в генераторе QR-кодов QRcode.website: создайте несколько кодов с одинаковым количеством символов, но разным содержимым, и сравните размер получившейся матрицы.
Шестнадцатеричная система также встречается при настройке внешнего вида QR-кода. Например, цвет можно задать кодом #1A73E8. При выборе цветов важно учитывать не только их значения в RGB, но и контраст между темными модулями и светлым фоном. Слишком низкая разница по яркости может ухудшить распознавание QR-кода.
Основание системы показывает количество используемых цифр.
В позиционной системе вес разряда определяется степенью основания.
Десятичная система использует 10 цифр, двоичная - 2, восьмеричная - 8, шестнадцатеричная - 16.
Восьмеричная цифра соответствует трем битам.
Шестнадцатеричная цифра соответствует четырем битам.
Один байт можно записать двумя шестнадцатеричными цифрами.
Для перевода в десятичную систему число раскладывают по степеням основания.
Для перевода из десятичной системы используют последовательное деление с остатком.
Между двоичной, восьмеричной и шестнадцатеричной системами удобно переводить группировкой разрядов.
Дробную часть переводят последовательным умножением на новое основание.
Результат перевода полезно проверять обратным вычислением.
Системы счисления делятся на позиционные и непозиционные. В позиционных значение цифры определяется ее местом. К ним относятся двоичная, восьмеричная, десятичная и шестнадцатеричная системы. В непозиционных значение символов не зависит от позиции, как в унарной записи или римских цифрах.
Двоичная система хорошо соответствует физическим принципам работы цифровой техники. Электронным схемам удобно надежно различать два состояния сигнала. Поэтому информация представляется последовательностями битов, каждый из которых принимает значение 0 или 1.
Hex позволяет компактно отображать двоичные данные. Одна шестнадцатеричная цифра соответствует четырем битам, поэтому байт представляется двумя символами. Это удобно при работе с адресами, дампами, хешами, байтами и цветами.
Одно из наиболее известных современных применений - права доступа в Unix-подобных системах. Например, chmod 755 задает набор разрешений для владельца, группы и остальных пользователей.
Нужно разбить двоичную запись на группы по четыре бита справа налево и заменить каждую группу соответствующей hex-цифрой. Например, 11001010 превращается в 1100 1010, то есть CA.
Потому что запись зависит от основания. 10₂ равно двум, 10₈ равно восьми, 10₁₀ равно десяти, а 10₁₆ равно шестнадцати. В любой системе запись 10 означает само основание этой системы.
Да. Для целых чисел достаточно знать правила разложения по степеням основания, деления с остатком и группировки двоичных разрядов. Для небольших чисел эти операции выполняются вручную достаточно быстро.
QR-код хранит данные в цифровой форме и использует разные режимы кодирования в зависимости от типа содержимого. Числовые данные можно упаковывать эффективнее, чем произвольные байтовые последовательности, поэтому состав исходной строки влияет на объем данных внутри QR-кода.
Системы счисления являются способом представления одного и того же числового значения в разных формах. Понимание оснований и позиционного принципа позволяет без сложных вычислений переходить между двоичной, восьмеричной, десятичной и шестнадцатеричной записью, а также лучше понимать работу компьютерных систем, программного обеспечения, штрих-кодов и QR-кодов.