web-dev-qa-db-fra.com

Combien de bits par chiffre dans le système décimal

Je vais enseigner à un petit groupe de personnes les systèmes de numérotation en informatique et je me demandais combien de bits par chiffre se trouvent dans le système décimal, par exemple:

  • Hex (base 16) - 4 bits
  • Octal (base 8) - 3 bits
  • Binaire (base 2) - 1 bit
  • Décimal (base 10) -?
29
user92592

Ce que vous recherchez, c'est le logarithme à 2 basé sur 10, soit un nombre irrationnel d'environ 3.32192809489 ....

Le fait que vous ne pouvez pas utiliser un nombre entier de bits pour un chiffre décimal est la raison fondamentale pour laquelle de nombreuses fractions faciles à exprimer dans le système décimal (par exemple 1/5 ou 0,2) sont impossibles (pas difficile: vraiment). impossible) à exprimer en binaire. Ceci est important lors de l'évaluation des erreurs d'arrondi dans les arithmétiques à virgule flottante.

98
Eugen Rieck

En d'autres termes, quelle quantité d'informations est contenue dans un seul chiffre dans ces systèmes.

Pour base 2, base 4, base 8, base 16 et autre 2N base la réponse est évidente car dans une base 2N chaque chiffre peut être exprimé avec exactement N chiffres.

Comment obtenez-vous N donné 2N? Eh bien, vous utilisez un logarithme basé sur 2, qui est l'inverse de l'exponentiation.

  • bûche2 2 = 1 (1 bit par chiffre en base 2)
  • bûche2 4 = 2 (2 bits par chiffre en base 4)
  • bûche2 8 = 3 (3 bits par chiffre en base 8)
  • bûche2 16 = 4 (4 bits par chiffre en base 16)

Les logarithmes basés sur K des nombres qui ne sont pas des puissances de K ne sont pas des nombres cardinaux. En particulier:

  • bûche2 10 = 3.321928094887362347870319429489390175864831393024580612054…

Ce nombre peut sembler déroutant, mais il a en fait quelques utilisations. Par exemple, il s'agit d'une entropie d'un seul chiffre décimal.

Pour votre cas, cependant, je ne pense pas que cette valeur soit d'aucune utilité. La réponse de @ Christian fait un bon travail pour expliquer pourquoi.

21
gronostaj

Au sujet des bits:

Je suis désolé de dire que la question est erronée. Vous n'utiliseriez pas les bits de cette manière. Un bit est un chiffre binaire . Vous pouvez convertir le nombre décimal 10 en un nombre binaire 1010 (8 + 2). Vous aurez donc besoin de 4 bits pour exprimer la valeur décimale 10.


Pouvoirs de 2

Vous êtes tombé dans un piège en utilisant les exemples binary (2), octal (8) et hexadécimal (16), car ils sont tous des puissances de 2 et vous pouvez donc les considérer en termes de bits, alors que 10 n'est pas une puissance de 2, donc ça ne marche pas très bien comme ça.

8
Christian

BCD - La décimale codée binaire utilise 4 bits par chiffre, la même chose que l'hexadécimal.

https://en.wikipedia.org/wiki/Binary-coded_decimal

7
CWS Matt

Cela pourrait être une simplification excessive, mais cela dépend de la question que vous posez.
(et la réponse est fondamentalement octale ou hexadécimale)

Je ne considère pas non plus les bits fractionnaires comme des bits car, dans la pratique, les bits n'ont pas de fractions.

Q1: Combien de bits pouvez-vous représenter dans un chiffre décimal ?

A1: Vous pouvez représenter 3 bits d'information en un seul chiffre décimal:

Le schéma le plus courant serait le binaire simple avec wrapping où 0 = 8 = 000 et 1 = 9 = 001. Mais vous pouvez utiliser n'importe quel schéma, rien n'indique que c'est le seul moyen de coder des bits en chiffres décimaux.

  • 0: 000
  • 1: 001
  • 2: 010
  • 3: 011
  • 4: 100
  • 5: 101
  • 6: 110
  • 7: 111
  • 8: 000 <- emballage (ou non utilisé)
  • 9: 001 <- emballage (ou non utilisé)

ou

Q2: Combien de bits faut-il pour représenter un chiffre décimal?

A2: Vous avez besoin d'au moins 4 bits pour représenter tous les chiffres décimaux. Avec des déchets ou des emballages.

Encore une fois, le schéma le plus courant serait le binaire direct avec habillage, mais vous pouvez utiliser tout autre schéma.

  • 0: 0000
  • 1: 0001
  • 2 h 00 min
  • 3: 0011
  • 4: 0100
  • 5: 0101
  • 6: 0110
  • 7: 0111
  • 8: 1000
  • 9: 1001
  • 0: 1010 <- emballage (ou non utilisé)
  • 1: 1011 <- emballage (ou non utilisé)
  • 2: 1100 <- emballage (ou non utilisé)
  • 3: 1101 <- emballage (ou non utilisé)
  • 4: 1110 <- emballage (ou non utilisé)
  • 5: 1111 <- emballage (ou non utilisé)
3
Justin Ohms

L'utilisation de bits implique une puissance de 2, ainsi, comme d'autres l'ont déjà dit, il est difficile de convertir 10 bits en octets sans gaspillage. Une solution courante consiste à utiliser 4 bits selon l'hexadécimal et à gaspiller les 6 états représentés par A à F. La partie intéressante est de faire des calculs décimaux avec cela - ce n’est pas simple et ordonné.

Une idée pédagogique utile pourrait être de comparer la manière dont Micky Mouse a pu développer un système de comptage, car il n'a que 4 doigts par main, ce qui conduit naturellement à un système octal.

3
davidgo

En base 1024, chaque symbole a 10 bits. Trois chiffres décimaux ont la même quantité d’information qu’un chiffre en base 1000, ce qui est légèrement inférieur à 1024. Par conséquent, un chiffre décimal a un peu moins de 10/3 bits. Cette approximation donne 3.333333 ..., tandis que le nombre exact est 3.321928 ...

2
Acccumulation
  • Hex (base 16) - 4 bits
  • Octal (base 8) - 3 bits
  • Binaire (base 2) - 1 bit
  • Décimal (base 10) - 3 1/3 bits.
    2dix = 1 024
    dix3 = 1 000
    220 = 1 048 576
    dix6 = 1.000.000
    3 chiffres de la base 10 à 999 peuvent être conservés dans 10 bits de la base 2.
    6 chiffres de la base 10 à 999 999 peuvent être conservés dans 20 bits de la base 2.
    C’est l’idée des kilo-octets, des mégaoctets et des gigaoctets.
2
Russell Hankins

Disclaimer - Je ne suis pas un théoricien de l'information, je suis juste un singe codé qui travaille principalement en C et C++ (et donc, avec les types à largeur fixe), et ma réponse sera de ce point de vue particulier.

Cela prend en moyenne 3,2 bits pour représenter un seul chiffre décimal - 0 à 7 peuvent être représentés en 3 bits, tandis que 8 et 9 en exigent 4. (8*3 + 2*4)/10 == 3.21.

C'est moins utile que ça en a l'air. D'une part, vous n'avez évidemment pas des fractions de peu. D'autre part, si vous utilisez des types entiers natifs (c'est-à-dire pas BCD ou BigInt), vous ne stockez pas de valeurs sous forme d'une séquence de chiffres décimaux (ou leurs équivalents binaires). Un type de 8 bits peut stocker des valeurs qui prennent jusqu'à 3 chiffres décimaux, mais vous ne pouvez pas représenter toutes les valeurs de 3 chiffres décimaux en 8 bits - la plage est [0..255]. Vous ne pouvez pas représenter les valeurs [256..999] dans seulement 8 bits.

Lorsque nous parlons de values ​​, nous utiliserons le nombre décimal si l’application l’attend (par exemple, une application de banque numérique). Quand nous parlons de bits , nous utiliserons généralement hex ou binaire (je n’utilise presque jamais d’octal car je travaille sur des systèmes qui utilisent des octets de 8 bits et des mots de 32 bits, qui ne sont pas divisibles par 3. ).

Les valeurs exprimées en décimal ne correspondent pas clairement aux séquences binaires. Prenez la valeur décimale 255. Les équivalents binaires de chaque chiffre seraient 010, 101, 101. Pourtant, la représentation binaire de la valeur 255 est 11111111. Il n'y a tout simplement aucune correspondance entre any des chiffres décimaux dans la valeur de la séquence binaire. Mais il existe une correspondance directe avec les chiffres hexadécimaux - F == 1111, de sorte que la valeur peut être représentée par FF en hexa.

Si vous êtes sur un système où les octets de 9 bits et les mots de 36 bits sont la norme, l'octal a plus de sens car les bits se regroupent naturellement en trois.




  1. En réalité, la moyenne par chiffre est plus petite puisque 0 et 1 ne requièrent qu'un seul bit, alors que 2 et 3 ne requièrent que 2 bits. Mais, dans la pratique, on considère que 0 à 7 prennent 3 bits. Simplifie la vie de nombreuses façons.
0
John Bode

Si j'enseignais cela, j'expliquerais d'abord ce que signifie un nombre (exprimé en une série de chiffres). c'est-à-dire de droite à gauche, en supposant que la base n, a * n ^ 0 + b * n ^ 1 + c * n ^ 2 ... z * n ^ y.

Expliquez ensuite que 10 ^ 3 équivaut approximativement à 2 ^ 10. Ce n’est pas exact et c’est la raison en informatique, nous ne savons souvent pas ce que 2k signifie réellement (est-ce 2 000 ou 2 048?) Cela sert assez bien pour des approximations rapides. 2 ^ 16 est environ 2 ^ (16 - 10) * 1 000 ou 2 ^ 6 (64) * 1 000 ou 64 000. En réalité, il s’agit de 65 536, mais si cela ne vous dérange pas de perdre un pour cent, cela fonctionne assez bien pour une approximation rapide.

0
Dale Chatham