Vous pouvez convertir décimal en binaire et binaire en décimal. Mais comment pouvez-vous représenter le nombre "256"?
255 = 11111111
Un octet ne peut pas avoir plus de 8 chiffres binaires (bits). Comment est-ce possible?
Vous pouvez convertir décimal en binaire et binaire en décimal. Mais comment pouvez-vous représenter le nombre "256"?
255 = 11111111
Un octet ne peut pas avoir plus de 8 chiffres binaires (bits). Comment est-ce possible?
Réponses:
Vous demandez comment représenter 256 en binaire, mais je suppose que vous vous demandez pourquoi les gens disent que les octets peuvent stocker 256 nombres différents, alors que le plus grand nombre qu'il stocke est 255. Comme l'a dit Claudiop, les ordinateurs commencent à compter à 0, donc 0 est en fait le premier nombre, 1 est le deuxième, 2 est le troisième ... 255 est le 256e.
En outre, 11111111 n'est que de 255 pour les octets non signés. Lorsque vous avez un octet signé (une valeur signée peut contenir des valeurs négatives), 11111111 est en fait -1. Voir http://en.wikipedia.org/wiki/Two's_complement . La façon dont le complément à deux fonctionne, l'ajout d'un nombre négatif à un nombre positif donne 0. Comme d'autres l'ont dit, si nous ajoutons un peu à 11111111 et que votre type de données ne peut prendre en charge que 8 bits, le dernier bit débordera et vous laissera avec 0. Pour les octets signés, les valeurs vont de -128 à 127. 128 nombres négatifs + 0 + 127 nombres positifs = 256 nombres au total.
Pour les valeurs signées, le premier bit est le bit "signe". Si ce bit est activé, le nombre est négatif. 10000000 est négatif, 01000000 est positif, 11111111 est négatif, 01111111 est positif ...
Si vous êtes sur Windows (peut-être que Mac l'a aussi), vous pouvez ouvrir la calculatrice, la mettre en mode programmeur, choisir sbyte et jouer avec les bits pour voir comment ils sont corrélés à leurs représentations décimales.
Eh bien, vous avez besoin de 2 octets pour représenter cela. 256 = 00000001 00000000
Comme vous le savez déjà, 255d (décimal) est égal à 11111111b (binaire). Si vous voulez maintenant ajouter 1 à la valeur, il y a deux possibilités:
Soit vous n'avez que 8 bits. Dans ce cas, un soi-disant débordement se produit. Donc "en interne", le 1 sera ajouté résultant en 100000000b (256d en 9 bits). Mais comme vous ne disposez que de 8 bits, les 8 bits inférieurs seront "renvoyés". Vous vous retrouvez donc avec 0d = 0b (un indicateur de débordement spécial sera défini sur la plupart des architectures informatiques, juste comme note secondaire).
Pensez à cela comme à compter avec vos doigts. Imaginez que vos doigts montrent 9d. Maintenant, vous ajoutez un doigt de plus. Vous vous retrouvez avec 10. Que faites-vous si vous voulez en ajouter un de plus?
L'autre possibilité est que vous disposez de plus de 8 bits. Dans ce cas, vous pouvez simplement ajouter un chiffre de plus au début et le résultat sera vraiment 100000000b = 256d.
Un octet est la plus petite "unité" qu'un système informatique (système de mémoire) puisse adresser. Cela signifie que si vous ne voulez connaître qu'un seul bit, vous devez demander au système de mémoire de vous donner un certain octet à partir d'une adresse et vous devez ensuite déterminer la valeur du bit qui vous intéresse.
Mais de la même manière que 8 bits constituent un octet, il existe également des types de données plus grands. 2 octets constituent un mot (16 bits), deux mots (quatre octets, 32 bits) constituent un double mot. Et les architectures 64 bits standard actuelles ont même des types de données 64 bits (appelés registres).
Vous pouvez le représenter par une opération de décalage de bit (gauche ou droite selon l' endianité de la représentation binaire). Par exemple, cette ligne fonctionne pour une grande représentation endienne (octet le plus significatif en premier):
1 << 8
Un octet non signé ne peut contenir que 256 valeurs, ce qui inclut la plage de [0 - 255]. Pour la valeur 256, vous devez utiliser un type de données capable de contenir une valeur plus élevée, par exemple un entier.