Les systèmes de numérotation
Le système décimal
Nous sommes habitués, depuis notre enfance à utiliser le système numérique décimal, à tel point que nous ne voyons même plus la manière donc ce système fonctionne, tant c’est devenu un automatisme. Décimal, pourquoi ? Parce qu’il utilise une numérotation à 10 chiffres. Nous dirons que c’est un système en BASE 10. Pour la petite histoire, on a utilisé un système base 10 car nos ancêtres ont commencé à compter sur leurs 10 doigts, pas besoin d’aller chercher plus loin. Mais la position des chiffres a également une grande importance. Les chiffres les moins significatifs se situent à droite du nombre, et leur importance augmente au fur et à mesure du déplacement vers la gauche. En effet, dans le nombre 502, le 5 à une plus grande importance que le 2. En réalité, chaque chiffre, que l’on peut appeler DIGIT, à une valeur qui dépend de son RANG . Quel est ce rapport ? Il s’agit tout simplement de l’élévation de la BASE utilisée élevé à la puissance de son RANG .Cela a l’air complexe à écrire, mais est très simple à comprendre. Quand vous avez compris ceci, vous comprendrez automatiquement n’importe quel système de numérotation.
Reprenons, par exemple notre nombre 502. Que signifie-t-il ? Et bien, tout simplement que sa valeur est égale à 2 multiplié par la base (10) élevée à la puissance du rang du chiffre, c’est à dire 0. Remarquez ici une chose très importante : le comptage du rang s’effectue toujours de droite à gauche et en commençant par 0. Pour notre nombre 502, sa valeur est donc en réalité :
502 = 2*10° + 0*101 + 5*10². Notez que le symbole * est utilisé pour indiquer « multiplié ». Et rappelez-vous que 10° = (10/10) = 1, que 101 = 10, et que 10² = 10*10 = 100 etc.
Le système binaire
Vous avez compris ce qui précède ? Alors la suite va vous paraître simple. Cela ne pose aucun problème pour vous de compter sur vos 10 doigts, mais pour les ordinateurs, cela n’est pas si simple. Ils ne savent faire la distinction qu’entre 2 niveaux (présence ou absence de tension). Le système de numérotation décimal est donc inadapté. On comprendra immédiatement que le seul système adapté est donc un système en base 2, appelé système binaire. Ce système ne comporte donc que 2 chiffres, à savoir 0 et 1. Comme, de plus, les premiers ordinateurs (et les pics) travaillent avec des nombres de 8 chiffres binaires, on a donc appelé ces nombres des octets (ou bytes en anglais). Le chiffre 0 ou 1 est appelé un BIT(unité binaire, ou BInary uniT) .Pour nous y retrouver dans la suite de ce petit ouvrage, on adoptera les conventions suivantes : tout nombre décimal est écrit tel quel, ou en utilisant la notation D’xxx’ ; tout nombre binaire est écrit suivant la forme B’xxxxxxxx’ dans lesquels les ‘x’ valent… 0 ou 1, vous avez suivi. Analysons maintenant un nombre binaire, soit l’octet : B’10010101’. Quelle est donc sa valeur en décimal ?
Et bien, c’est très simple, on applique le même algorithme que pour le décimal. Partons de la droite vers la gauche, on trouve donc :B’10010101’ = 1*2° + 0*21 + 1*2² + 0*23 + 1* 24 + 0*25 + 0*26 + 1*27.Comme, évidemment 0 multiplié par quelque chose = 0 et que 1 multiplié par un chiffre = le chiffre en question, on peut ramener le calcul précédent à :B ‘10010101’ = 1+4+16+128 = 149
Vous voyez donc qu’il est très facile de convertir n’importe quel chiffre de binaire en décimal. Et l’inverse me direz-vous ? Et bien, c’est également très simple. Il faut juste connaître votre table des exposants de 2. Cela s’apprend très vite lorsqu’on s’en sert. On procède simplement de la manière suivante (il y en a d’autres) :Quel est le plus grand exposant de 2 contenu dans 149 ? Réponse 7 (27 = 128).On sait donc que le bit7 vaudra 1. Une fois fait, il reste 149-128 = 21
Le bit 6 représente 64, c’est plus grand que 21, donc b6 = 0
Le bit 5 représente 32, c’est plus grand que 21, donc b5 = 0
Le bit 4 représente 16, donc ça passe, b4 = 1, il reste 21-16 = 5
Le bit 3 représente 8, c’est plus grand que 5, donc b3 = 0
Le bit 2 représente 4, donc b2 = 1, reste 5-4 = 1
Le bit1 représente 2, c’est plus grand que 1, donc b1 = 0
Le bit 0 représente 1, c’est ce qu’il reste, donc b1=1, reste 0
Le nombre binaire obtenu est donc B’10010101’, qui est bien notre octet de départ. Notez que si on avait trouvé un nombre de moins de 8 chiffres, on aurait complété avec des 0 placés à gauche du nombre. En effet, B’00011111’ = B ‘11111’, de même que 0502 = 502.Pensez à toujours compléter les octets de façon à obtenir 8 bits, car c’est imposé par la plupart des assembleurs (nous verront ce que c’est dans la suite de ces leçons).Notez que la plus grande valeur pouvant être représentée par un octet est donc : B’11111111’. Si vous faites la conversion (ou en utilisant la calculette de windows en mode scientifique), vous obtiendrez 255. Tout nombre supérieur à 255 nécessite donc plus d’un octet pour être représenté.
Le système hexadécimal
La représentation de nombres binaires n’est pas évidente à gérer, et écrire une succession de 1 et de 0 représente une grande source d’erreurs. Il fallait donc trouver une solution plus pratique pour représenter les nombres binaires. On a donc décider de couper chaque octet en 2 (QUARTET) et de représenter chaque partie par un chiffre. Comme un quartet peut varier de b’0000’ à b’1111’, on constate que l’on obtient une valeur comprise entre 0 et 15. Cela fait 16 combinaisons. Les 10 chiffres du système décimal ne suffisaient donc pas pour coder ces valeurs.
Plutôt que d’inventer 6 nouveaux symboles, il a été décidé d’utiliser les 6 premières lettres de l’alphabet comme CHIFFRES. Ce système de numérotation en base 16 a donc été logiquement appelé système hexadécimal.
Notez que ce système est simplement une représentation plus efficace des nombres binaires, et donc que la conversion de l’un à l’autre est instantanée. Dans la suite de ces leçons, nous noterons un nombre hexadécimal en le faisant précéder de 0x. Voyons si vous avez bien compris :
Tableau de conversion des différents quartet (un demi-octet)
Binaire Hexadécimal Décimal
B’0000’ 0x0 0
B’0001’ 0x1 1
B’0010’ 0x2 2
B’0011’ 0x3 3
B’0100’ 0x4 4
B’0101’ 0x5 5
B’0110’ 0x6 6
B’0111’ 0x7 7
B’1000’ 0x8 8
B’1001’ 0x9 9
B’1010’ 0xA 10
B’1011’ 0xB 11
B’1100’ 0xC 12
B’1101’ 0xD 13
B’1110’ 0xE 14
B’1111’ 0xF 15
Pour représenter un octet il faut donc