Zastrzeżenie - nie jestem teoretykiem informacji, tylko małpą kodu, która pracuje głównie w C i C ++ (a zatem z typami o stałej szerokości), a moja odpowiedź będzie z tej konkretnej perspektywy.
Trwa średnio 3,2 bitów reprezentuje cyfrę dziesiętną - 0 do 7, może być reprezentowana w 3 bity, natomiast 8 i 9 wymagają 4. (8*3 + 2*4)/10 == 3.2
1 .
Jest to mniej przydatne niż się wydaje. Po pierwsze, oczywiście nie masz ułamków. Po drugie, jeśli używasz rodzimych typów liczb całkowitych (tj. Nie BCD ani BigInt), nie przechowujesz wartości jako sekwencji cyfr dziesiętnych (lub ich binarnych odpowiedników). Typ 8-bitowy może przechowywać niektóre wartości, które zajmują do 3 cyfr dziesiętnych, ale nie można przedstawić wszystkich wartości 3-cyfrowych w 8 bitach - zakres wynosi [0..255]
. Nie możesz reprezentować wartości [256..999]
tylko w 8 bitach.
Kiedy mówimy o wartościach , użyjemy dziesiętnego, jeśli aplikacja tego oczekuje (np. Aplikacja bankowości cyfrowej). Kiedy mówimy o bitach , zwykle używamy szesnastkowego lub binarnego (prawie nigdy nie używam ósemkowego, ponieważ pracuję na systemach, które używają 8-bitowych bajtów i 32-bitowych słów, które nie są podzielne przez 3).
Wartości wyrażone w postaci dziesiętnej nie odwzorowują jednoznacznie sekwencji binarnych. Weź wartość dziesiętną 255
. Binarne odpowiedniki każdej cyfry byłoby 010
, 101
, 101
. Jednak binarna reprezentacja wartości 255
to 11111111
. Po prostu nie ma korespondencja między dowolny cyfr po przecinku w wartości do sekwencji binarnej. Ale istnieje bezpośrednia zgodność z cyframi szesnastkowymi - F == 1111
tak, że wartość może być reprezentowana jak FF
w systemie szesnastkowym.
Jeśli korzystasz z systemu, w którym 9-bitowe bajty i 36-bitowe słowa są normą, to ósemka ma większy sens, ponieważ bity naturalnie grupują się w trójki.
- W rzeczywistości średnia na cyfrę jest mniejsza, ponieważ 0 i 1 wymagają tylko jednego bitu, a 2 i 3 wymagają tylko 2 bitów. Ale w praktyce uważamy, że od 0 do 7 przyjmuje 3 bity. Po prostu ułatwia życie na wiele sposobów.
d
, to obejmuje jedną cyfrę dziesiętną, zakres0..9
.3*d
bity oznaczają trzy cyfry dziesiętne i pozwalają reprezentować liczby całkowite z zakresu0..999
. Całe dziesięć bitów (teraz binarne) daje zakres0..1023
. 999 jest dość blisko 1023, ale trochę mniej. Więc możesz oczekiwać, żed
powinna być nieco mniejsza niż 10/3.