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