Отказ от ответственности - я не теоретик информации, а просто обезьяна кода, которая работает в основном на C и C++ (и, следовательно, с типами фиксированной ширины), и мой ответ будет с этой конкретной точки зрения.
Для представления одной десятичной цифры требуется в среднем 3,2 бита - от 0 до 7 можно представить в 3 битах, тогда как для 8 и 9 требуется 4. (8*3 + 2*4)/10 == 3.2
1.
Это менее полезно, чем кажется. Во-первых, у вас явно не хватает долей. С другой стороны, если вы используете собственные целочисленные типы (т. Е. Не BCD или BigInt), вы не сохраняете значения в виде последовательности десятичных цифр (или их двоичных эквивалентов). 8-битный тип может хранить некоторые значения, которые принимают до 3 десятичных цифр, но вы не можете представить все 3-десятичные цифры в 8 битах - диапазон равен [0..255]
. Вы не можете представлять значения [256..999]
только в 8 битах.
Когда мы говорим о значениях, мы будем использовать десятичную, если приложение ожидает этого (например, приложение цифрового банкинга). Когда мы говорим о битах, мы обычно используем шестнадцатеричный или двоичный код (я почти никогда не использую восьмеричный, поскольку я работаю в системах, которые используют 8-битные байты и 32-битные слова, которые не делятся на 3).
Значения, выраженные в десятичном виде, не отображаются чисто на двоичные последовательности. Возьмите десятичное значение 255
. Двоичные эквиваленты каждой цифры будут 010
, 101
, 101
. Тем не менее, двоичное представление значения 255
- 11111111
. Просто нет соответствия между любой из десятичных цифр в значении двоичной последовательности. Но есть прямое соответствие с шестнадцатеричными цифрами - F == 1111
, так что значение может быть представлено как FF
в шестнадцатеричном формате.
Если вы работаете в системе, где 9-битные байты и 36-битные слова являются нормой, тогда восьмеричный смысл имеет больше смысла, поскольку биты естественно группируются в тройки.
- На самом деле среднее значение на цифру меньше, поскольку для 0 и 1 требуется только один бит, а для 2 и 3 требуется только 2 бита. Но на практике мы считаем, что от 0 до 7 занимают 3 бита. Просто облегчает жизнь во многих отношениях.