Содержание

Смешанные системы счисления

Примеры из жизни

Представьте, что вы считаете яблоки. Вы говорите: «У меня 33 яблока». Все яблоки считаем десятками. Отсчитали первый десяток, сделали перенос, второй десяток - ещё перенос, третий десяток – третий перенос. И ещё три яблока. Итого 3 десятка и три яблока. А если было бы не 33, а 333 яблока, то точно так же десятками считали бы десятки, чтобы получить сотню. Это однородная система, в каждом разряде «максимум» счёта (основание) = 10.

А теперь представьте, что вы считаете время. «Прошло два дня, 5 часов, 10 минут и 35 секунд». У вас тут и дни, и часы, и минуты, и секунды. И у всех разный «максимум» разряда. Это и есть смешанная система счисления. Почему? Потому что в одном разряде у нас «вмещается» одно число, в другом — другое:

Ещё примеры из жизни:

Длина (старая русская система):

Здесь каждый шаг — разное число (то 4, то 3). Это смесь.

Дюймы и футы (английская система):

Опять в каждом разряде свой лимит.

Система 2-16

В программировании и электронике часто используется смесь двоичной и шестнадцатеричной систем.

Например, в компьютере всё внутри в двоичном виде (0 и 1). Но человеку читать длиннющую строку 101011110011 неудобно. Поэтому берут и группируют двоичные цифры по 4 штуки (тетрады). А 4 двоичных цифры — это ровно одна шестнадцатеричная цифра (от 0 до F).

То есть мы считаем смешанно:

Возьмем для примера число `2027_10`. Переведём его в двоичную систему `11111101011_2` (каким-нибудь способом, например, делением с остатками), а потом запишем как `0111` `1110` `1011_2`. Из такой записи мы сможем его легко «конвертировать» в шестнадцатеричную систему, используя только знания о соответствиях двоичной и шестнадцатеричной записи цифр 0-F. Таким образом у нас получится смешанная система 2-16.

Двоично-десятичный код (Binary-Coded Decimal, BCD)

А теперь давайте рассмотрим смешанную систему 2-10, так называемый двоично-десятичный код. Чтобы записать максимальную в десятичной системе цифру `9_10` нам понадобится 4 двоичных разряда, как и для шестнадцатеричного числа `F_16`. Но лимит разряда у нас теперь будет не 16, а 10, поэтому двоичная запись тетрады сможет достигать не `F_16=1111_2`, а всего лишь `9_10=1001_2`. Если мы просто порежем наше двоичное число, как и раньше, на три тетрады, то получится невозможная запись. 1110 и 1011 не могут существовать в двоично-десятичной системе, т.к. 6 чисел, больших чем 1001, запрещены в такой записи.

Чтобы получить корректную запись числа `2027_10`, нам надо будет каждую его десятичную цифру записать двоичным кодом:

Попробуем посчитать, сколько будет «похожее» на него `10000000100111_(2-16)`:

О как, в 4 раза больше получилось. Потому что `2027_10` совсем не то же самое, что `2027_16`.

Приходим к выводу, что запись одного и того же числа в двоичной системе совпадает с записью в 2-16, а с записью в 2-10 (BCD) не совпадает. Такие пироги. В связи с этим с такими числовыми смешанными системами нужно быть очень аккуратными, особенно если преобразования пытаетесь делать сами на бумажке или в голове. Но за компьютеры и калькуляторы можете не волноваться, они всё корректно посчитают, программисты уже давно всё продумали.

Существует несколько форматов представления BCD:

Плюсы BCD:

Минусы BCD:

Двоично-десятичный код широко используется в:

В обычных вычислительных системах BCD применяется реже из-за указанных выше недостатков, но остаётся важным инструментом в областях, где критична точность десятичных вычислений.

А про то, как я сам того не подозревая, «открыл» для себя двоично-десятичный код, я уже невозбранно рассказывал здесь и здесь.

Суть смешанных систем

Смешанная система – это когда для каждого разряда числа свой «потолок» (основание).

Как будто считаешь яблоки разными «коробками»: в одну коробку влазит 12 яблок, в другую — 30, а в третью — 100. И ты говоришь: «У меня 2 коробки по 12, 3 коробки по 30 и 1 коробка по 100». Это и есть запись числа в смешанной системе.