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 y avait-il 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) -?
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.Réponses:
Ce que vous recherchez est le logarithme basé sur 2 de 10, ce qui est 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 cause première de la raison pour laquelle de nombreuses fractions faciles à exprimer dans le système décimal (par exemple 1/5 ou 0,2) sont impossibles (pas difficiles: vraiment impossible) à exprimer en binaire. Ceci est important lors de l'évaluation des erreurs d'arrondi dans l'arithmétique à virgule flottante.
la source
En d'autres termes, quelle quantité d'informations est contenue dans un seul chiffre dans ces systèmes.
Pour la base 2, la base 4, la base 8, la base 16 et les autres 2 N bases, la réponse est évidente car dans une base 2 N, chaque chiffre peut être exprimé avec exactement N chiffres.
Comment obtenez-vous N donné 2 N ? Eh bien, vous utilisez un logarithme basé sur 2, qui est l'inverse de l'exponentiation.
Les logarithmes basés sur K des nombres qui ne sont pas des puissances de K ne sont pas des nombres cardinaux. En particulier:
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 utile. @ La réponse de Christian explique bien pourquoi.
la source
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 1010 binaire (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 binaire (2), octal (8) et hexadécimal (16), car ce sont tous des puissances de 2, et donc vous pouvez 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.
la source
BCD - Binary Coded Decimal utilise 4 bits par chiffre, le même que Hexadecimal.
https://en.wikipedia.org/wiki/Binary-coded_decimal
la source
L'utilisation de bits implique une puissance de 2, donc, comme d'autres l'ont dit, vous ne pouvez pas facilement découper 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 comme AF. Le plus intéressant est de faire des calculs décimaux avec cela - ce n'est pas simple et net.
Une idée pédagogique utile pourrait être de comparer la façon 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.
la source
Cela peut être une simplification excessive, mais cela dépend de la question que vous posez.
(et la réponse est essentiellement 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'informations en un seul chiffre décimal:
Le schéma le plus courant serait un binaire simple avec habillage où 0 = 8 = 000 et 1 = 9 = 001. Mais vous pouvez utiliser n'importe quel schéma, rien ne dit que c'est la seule façon de coder les bits en chiffres décimaux.
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 quelques déchets ou emballages.
Encore une fois, le schéma le plus courant serait un binaire simple avec habillage, mais vous pouvez utiliser n'importe quel autre schéma.
la source
En base 1024, chaque symbole fait 10 bits. Trois chiffres décimaux ont la même quantité d'informations qu'un chiffre de la 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 ...
la source
2 10 = 1 024
10 3 = 1 000
2 20 = 1 048 576
10 6 = 1 000 000
3 chiffres en base 10 jusqu'à 999 peuvent être conservés en 10 bits en base 2.
6 chiffres en base 10 jusqu'à 999 999 peuvent être conservés en 20 bits en base 2.
C'est là qu'est née l'idée des kilo-octets, des mégaoctets et des gigaoctets.
la source
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 serait010
,101
,101
. Pourtant, la représentation binaire de la valeur255
est11111111
. 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 commeFF
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.
la source
1001001
doit être91
ou49
.1001001
correspond à73
(64 + 8 + 1
). Je ne l'interprète pas comme une séquence de chiffres décimaux codés binaires. Si c'est censé être BCD, qui doit utiliser 4 bits par chiffre, alors nous devons supposer un0
bit de tête , il doit donc l'être49
.3.2
chiffre que vous obtenez viole réellement la limite de la théorie de l'informationlog(10)/log(2)
.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 la base n, a * n ^ 0 + b * n ^ 1 + c * n ^ 2 ... z * n ^ y.
Expliquez ensuite que 10 ^ 3 est approximativement égal à 2 ^ 10. Ce n'est pas exact et c'est la raison dans les ordinateurs, nous ne savons souvent pas ce que signifie vraiment 2k (est-ce 2000 ou 2048?) Il sert assez bien pour des approximations rapides. 2 ^ 16 est d'environ 2 ^ (16 - 10) * 1 000, ou 2 ^ 6 (64) * 1 000 ou 64 000. En réalité, il est de 65 536, mais si cela ne vous dérange pas d'être à environ un pour cent, cela fonctionne assez bien pour des approximations rapides.
la source