Disclaimer - Non sono un teorico dell'informazione, solo una scimmia di codice che lavora principalmente in C e C ++ (e quindi, con tipi a larghezza fissa), e la mia risposta sarà da quella prospettiva particolare.
Sono necessari in media 3,2 bit per rappresentare una singola cifra decimale: da 0 a 7 possono essere rappresentati in 3 bit, mentre 8 e 9 richiedono 4. (8*3 + 2*4)/10 == 3.2
1 .
Questo è meno utile di quanto sembri. Per prima cosa, ovviamente non hai frazioni di un po '. Per un altro, se stai usando tipi interi nativi (cioè, non BCD o BigInt), non stai memorizzando valori come una sequenza di cifre decimali (o loro equivalenti binari). Un tipo a 8 bit può memorizzare alcuni valori che richiedono fino a 3 cifre decimali, ma non è possibile rappresentare tutti i valori di 3 cifre decimali in 8 bit - l'intervallo è [0..255]
. Non è possibile rappresentare i valori [256..999]
in soli 8 bit.
Quando parliamo di valori , utilizzeremo i decimali se l'applicazione lo prevede (ad esempio, un'applicazione di digital banking). Quando parliamo di bit , di solito usiamo hex o binary (non uso quasi mai ottale poiché lavoro su sistemi che usano byte a 8 bit e parole a 32 bit, che non sono divisibili per 3).
I valori espressi in decimale non vengono mappati in modo pulito su sequenze binarie. Prendi il valore decimale 255
. Gli equivalenti binari di ogni cifra sarebbe 010
, 101
, 101
. Tuttavia, la rappresentazione binaria del valore 255
è 11111111
. Semplicemente non c'è corrispondenza tra nessuna delle cifre decimali nel valore alla sequenza binaria. Ma c'è una corrispondenza diretta con cifre esadecimali F == 1111
, quindi quel valore può essere rappresentato come FF
in esadecimale.
Se sei su un sistema in cui i byte a 9 bit e le parole a 36 bit sono la norma, allora ottale ha più senso poiché i bit si raggruppano naturalmente in tre.
- In realtà, la media per cifra è inferiore poiché 0 e 1 richiedono solo un singolo bit, mentre 2 e 3 richiedono solo 2 bit. Ma, in pratica, consideriamo da 0 a 7 per prendere 3 bit. Semplifica la vita in molti modi.
d
, copre una cifra decimale, l'intervallo di0..9
.3*d
i bit indicano tre cifre decimali e consentono di rappresentare numeri interi dall'intervallo0..999
. Tutti e dieci i bit (pensa ora al binario) forniscono un intervallo di0..1023
. 999 è abbastanza vicino al 1023, ma un po 'meno. Quindi potresti aspettarti ched
dovrebbe essere poco meno di 10/3.