Відмова - я не теоретик інформації, а лише мавпа з кодом, яка працює в основному на C і C ++ (і, таким чином, з типами фіксованої ширини), і моя відповідь буде з цієї конкретної точки зору.
В середньому 3,2 біта представляють одну десяткову цифру - від 0 до 7 можуть бути представлені в 3 біти, тоді як 8 і 9 вимагають 4. (8*3 + 2*4)/10 == 3.2
1 .
Це менш корисно, ніж це звучить. З одного боку, у вас, очевидно, немає дрібних дробів. Для іншого, якщо ви використовуєте нативні цілі типи (тобто не BCD або BigInt), ви не зберігаєте значення як послідовність десяткових цифр (або їх двійкові еквіваленти). 8-бітний тип може зберігати деякі значення, що містять до 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.