Avertissement - Je ne suis pas un théoricien de l'information, juste un singe de code qui travaille principalement en C et C ++ (et donc avec des types à largeur fixe), et ma réponse va être de ce point de vue particulier.
Il faut en moyenne 3,2 bits pour représenter un chiffre décimal - 0 à 7 peut être représenté en 3 bits, alors que 8 et 9 nécessitent 4. (8*3 + 2*4)/10 == 3.2
1 .
C'est moins utile qu'il n'y paraît. D'une part, vous n'avez évidemment pas de fractions de bit. D'autre part, si vous utilisez des types entiers natifs (c'est-à-dire pas BCD ou BigInt), vous ne stockez pas de valeurs sous la forme d'une séquence de chiffres décimaux (ou leurs équivalents binaires). Un type à 8 bits peut stocker certaines valeurs qui prennent jusqu'à 3 chiffres décimaux, mais vous ne pouvez pas représenter toutes les valeurs à 3 chiffres décimaux sur 8 bits - la plage est [0..255]
. Vous ne pouvez pas représenter les valeurs [256..999]
en seulement 8 bits.
Lorsque nous parlons de valeurs , nous utiliserons la décimale si l'application s'y attend (par exemple, une application de banque numérique). Lorsque nous parlons de bits , nous utilisons généralement hexadécimal ou binaire (je n'utilise presque jamais octal car je travaille sur des systèmes qui utilisent des octets 8 bits et des mots 32 bits, qui ne sont pas divisibles par 3).
Les valeurs exprimées en décimales ne correspondent pas correctement aux séquences binaires. Prenez la valeur décimale 255
. Les équivalents binaires de chaque chiffre serait 010
, 101
, 101
. Pourtant, la représentation binaire de la valeur 255
est 11111111
. Il n'y a simplement aucune correspondance entre une des décimales de la valeur à la séquence binaire. Mais il existe une correspondance directe avec des chiffres hexadécimaux - F == 1111
, de sorte que la valeur peut être représentée comme FF
en hexadécimal.
Si vous êtes sur un système où les octets de 9 bits et les mots de 36 bits sont la norme, alors octal a plus de sens puisque les bits se regroupent naturellement en trois.
- En fait, la moyenne par chiffre est plus petite puisque 0 et 1 ne nécessitent qu'un seul bit, tandis que 2 et 3 ne nécessitent que 2 bits. Mais, en pratique, nous considérons 0 à 7 pour prendre 3 bits. Simplifie la vie de plusieurs façons.
d
, c'est qu'il couvre un chiffre décimal, la plage de0..9
.3*d
les bits signifient trois chiffres décimaux et vous permettent de représenter des entiers de la plage0..999
. Dix bits entiers (pensez binaire maintenant) donnent une plage de0..1023
. 999 est assez proche de 1023, mais un peu moins. Vous pouvez donc vous attendre àd
un peu moins de 10/3.