Представьте, что вы считаете яблоки. Вы говорите: «У меня 33 яблока». Все яблоки считаем десятками. Отсчитали первый десяток, сделали перенос, второй десяток - ещё перенос, третий десяток – третий перенос. И ещё три яблока. Итого 3 десятка и три яблока. А если было бы не 33, а 333 яблока, то точно так же десятками считали бы десятки, чтобы получить сотню. Это однородная система, в каждом разряде «максимум» счёта (основание) = 10.
А теперь представьте, что вы считаете время. «Прошло два дня, 5 часов, 10 минут и 35 секунд». У вас тут и дни, и часы, и минуты, и секунды. И у всех разный «максимум» разряда. Это и есть смешанная система счисления. Почему? Потому что в одном разряде у нас «вмещается» одно число, в другом — другое:
Ещё примеры из жизни:
Длина (старая русская система):
Здесь каждый шаг — разное число (то 4, то 3). Это смесь.
Дюймы и футы (английская система):
Опять в каждом разряде свой лимит.
В программировании и электронике часто используется смесь двоичной и шестнадцатеричной систем.
Например, в компьютере всё внутри в двоичном виде (0 и 1). Но человеку читать длиннющую строку 101011110011 неудобно. Поэтому берут и группируют двоичные цифры по 4 штуки (тетрады). А 4 двоичных цифры — это ровно одна шестнадцатеричная цифра (от 0 до F).
То есть мы считаем смешанно:
Возьмем для примера число `2027_10`. Переведём его в двоичную систему `11111101011_2` (каким-нибудь способом, например, делением с остатками), а потом запишем как `0111` `1110` `1011_2`. Из такой записи мы сможем его легко «конвертировать» в шестнадцатеричную систему, используя только знания о соответствиях двоичной и шестнадцатеричной записи цифр 0-F. Таким образом у нас получится смешанная система 2-16.
А теперь давайте рассмотрим смешанную систему 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». Это и есть запись числа в смешанной системе.