Отказ от ответственности - я не теоретик информации, а просто обезьяна кода, которая работает в основном на C и C ++ (и, следовательно, с типами фиксированной ширины), и мой ответ будет с этой конкретной точки зрения.
Он принимает в среднем 3,2 битов для представления одного десятичных цифр - от 0 до 7 может быть представлена в 3 -х битов, в то время как 8 и 9 требуют 4. (8*3 + 2*4)/10 == 3.21 .
Это менее полезно, чем кажется. Во-первых, у вас явно не хватает долей. С другой стороны, если вы используете собственные целочисленные типы (т. Е. Не 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 бита. Просто облегчает жизнь во многих отношениях.
d, это охватывает одну десятичную цифру, диапазон0..9.3*dбиты означают три десятичных знака и позволяют вам представлять целые числа из диапазона0..999. Целые десять бит (подумайте двоично) дают диапазон0..1023. 999 довольно близко к 1023, но немного меньше. Таким образом, вы можете ожидать,dдолжно быть немного меньше, чем 10/3.