Mathématiques pour l'informatique 201-N11 • Cégep à Montréal

Fiche de révision : les systèmes de numération informatique (201-N11)

La numération est le chapitre le plus mécanique du cours et pourtant celui où les copies perdent le plus de points : les algorithmes sont simples, mais chacun a un SENS de lecture, et l'inverser donne un résultat propre et faux.

Cette fiche rassemble ces sens de lecture et les cas limites : les restes de bas en haut, les paquets depuis la droite, l'ajout du 11 après l'inversion, et le seul signe qui révèle un débordement.

Le fil du chapitre

Un motif de bits ne vaut rien tout seul : c'est l'INTERPRÉTATION choisie, non signée, complément à deux ou IEEE 754, qui décide de la valeur qu'il représente.

Ce chapitre fait partie de Mathématiques pour l'informatique, 201-N11

L'essentiel

Les poids positionnels, dans toutes les bases

  • En base bb, le chiffre de rang kk pèse bkb^{k} ; après la virgule, les poids sont b1b^{-1}, b2b^{-2}, et ainsi de suite.
  • Un octet porte les poids 128128, 6464, 3232, 1616, 88, 44, 22, 11, du bit de poids fort à celui de poids faible.
  • Un chiffre hexadécimal vaut exactement 44 bits, un chiffre octal 33 bits : le découpage en paquets se fait TOUJOURS à partir de la droite.
  • Sur nn bits non signés : de 00 à 2n12^{n}-1. En complément à deux : de 2n1-2^{n-1} à 2n112^{n-1}-1.
01281641320160814020164 + 32 + 4 = 100le rang le plus à gauche pèse le plus lourd
Le motif 0110010001100100 additionne les poids des rangs à 11 : 64+32+4=10064+32+4=100, et le rang le plus à gauche est celui qui pèse le plus.

Retenir les huit poids d'un octet dispense de tout calcul de conversion en dessous de 256256 : la lecture directe est plus rapide et plus sûre que les divisions successives.

Convertir, dans un sens et dans l'autre

  • Décimal vers base bb, partie entière : divisions successives par bb, restes lus DE BAS EN HAUT.
  • Partie fractionnaire : multiplications successives par bb, parties entières lues DE HAUT EN BAS.
  • Base bb vers décimal : somme des chiffres multipliés par leurs poids, sans aucune division.
  • Un décimal fini n'a d'écriture binaire finie que si son dénominateur réduit est une puissance de 22.

Les deux sens de lecture sont opposés, et c'est la seule chose à mémoriser : entiers de bas en haut, fractions de haut en bas.

Le complément à deux

  • Complément à deux de xx : inverser tous les bits, PUIS ajouter 11. Le motif obtenu vaut 2nx2^{n}-x.
  • Le bit de poids fort joue le rôle de bit de signe : 11 signifie négatif.
  • L'intervalle n'est pas symétrique : sur 88 bits, de 128-128 à 127127, car le zéro occupe une place du côté positif.
  • Débordement signé : les deux opérandes de MÊME signe et un résultat de signe opposé. Deux opérandes de signes contraires ne débordent jamais.
motifnon signésigné00000001117710008-8111115-1le bit de tête à 1 fait basculer la lecture
Le même motif de quatre bits se lit 1212 en non signé et 4-4 en complément à deux : c'est la convention choisie, non le motif, qui donne la valeur.

Le complément à deux existe pour qu'une seule addition serve aux positifs comme aux négatifs. C'est pour cela que la soustraction n'est qu'une addition du complément.

Opérations bit à bit, décalages et IEEE 754

  • ET pour ÉTEINDRE des bits, OU pour les ALLUMER, OU EXCLUSIF pour les BASCULER.
  • Décalage de kk rangs à gauche : multiplication par 2k2^{k}. À droite : division entière par 2k2^{k}.
  • IEEE 754 simple précision : 11 bit de signe, 88 bits d'exposant biaisé de 127127, 2323 bits de mantisse avec un 11 implicite.
  • Les entiers y sont exacts jusqu'à 2242^{24}, soit 1677721616\,777\,216 ; au-delà, deux entiers voisins partagent la même représentation.
18 bits23 bitsSexposantmantissebiaisé de 127avec un 1 implicite devantentiers exacts jusqu'à 16 777 216
Les 3232 bits d'un flottant simple précision : un pour le signe, huit pour l'exposant biaisé, vingt-trois pour la mantisse, dont le 11 de tête n'est pas stocké.

Un test d'égalité entre deux flottants est presque toujours une erreur de programmation : on compare ab|a-b| à une tolérance, exactement comme dans les vérifications de cette fiche.

Les pièges qui coûtent des points

Les erreurs ci-dessous sont celles que je corrige le plus souvent en séance. Chacune coûte des points sur une copie, même quand le raisonnement est juste.

1. Lire les restes des divisions successives dans le mauvais sens

1,5 point, et le contrôle par les poids est immédiat

Ce qu'il ne faut pas écrire

« 1313 divisé par 22 donne les restes 11, 00, 11, 11, donc 101121011_{2}. »

Ce qu'il faut écrire

« Les restes se lisent DE BAS EN HAUT : 110121101_{2}, ce qui vaut bien 8+4+1=138+4+1=13. »

Pourquoi : Le premier reste obtenu est celui du poids le plus FAIBLE, puisqu'on divise à partir des unités. Recomposer le nombre par ses poids attrape l'erreur en dix secondes.

2. Découper en paquets de quatre bits à partir de la gauche

2 points, et une valeur multipliée par une puissance de deux

Ce qu'il ne faut pas écrire

« 1101012110101_{2} se découpe en 11011101 et 0101, donc D116\text{D}1_{16}. »

Ce qu'il faut écrire

« On découpe depuis la DROITE : 1111 et 01010101, complété à gauche par des zéros, donc 0011 01010011\ 0101, soit 351635_{16}. »

Pourquoi : Le regroupement suit les poids, qui se comptent depuis les unités. Compléter à gauche par des zéros ne change pas la valeur ; compléter à droite la multiplie.

3. Inverser les bits sans ajouter un

2 points, et toutes les additions qui suivent

Ce qu'il ne faut pas écrire

« 55 vaut 000001010000\,0101, donc 5-5 vaut 111110101111\,1010. »

Ce qu'il faut écrire

« On inverse PUIS on ajoute 11 : 111110111111\,1011. On vérifie que 5+251=2565+251=256. »

Pourquoi : Le complément à un, sans le +1+1, laisse deux représentations du zéro et casse l'addition. Le contrôle est arithmétique : le motif d'un négatif x-x vaut 2nx2^{n}-x lu en non signé.

4. Diagnostiquer un débordement sur la retenue sortante

2 points, et la question de diagnostic vaut le double à l'examen

Ce qu'il ne faut pas écrire

« Il y a une retenue qui sort du bit de poids fort, donc il y a débordement. »

Ce qu'il faut écrire

« En complément à deux, le débordement se lit sur le SIGNE : deux opérandes positifs qui donnent un résultat négatif, ou l'inverse. »

011001000011001010010110100+ 50= -106les deux opérandes sont positifsle bit de signe est passé à 1débordement : 150 ne tient pas sur 8 bits signés
Deux opérandes positifs, 100100 et 5050, donnent un motif dont le bit de tête vaut 11 : le résultat se lit 106-106, et le débordement est là, sans aucune retenue sortante.

Pourquoi : La retenue sortante signale un débordement NON SIGNÉ. En complément à deux, elle est souvent parfaitement normale, par exemple quand on additionne deux nombres négatifs dont la somme tient encore.

5. Confondre les deux intervalles représentables

1 point, et une conclusion fausse sur un débordement

Ce qu'il ne faut pas écrire

« Sur 88 bits on va de 255-255 à 255255. »

Ce qu'il faut écrire

« Non signé : de 00 à 255255. Complément à deux : de 128-128 à 127127, l'intervalle n'étant pas symétrique. »

Pourquoi : Huit bits ne codent que 256256 valeurs, quelle que soit la convention. Le zéro comptant du côté positif, il reste une valeur de plus du côté négatif.

6. Croire qu'un décimal simple s'écrit exactement en binaire

2 points sur la question d'analyse, et des bogues en programmation

Ce qu'il ne faut pas écrire

« 0,1+0,2=0,30{,}1+0{,}2=0{,}3, la machine le confirmera. »

Ce qu'il faut écrire

« 0,10{,}1 n'a pas d'écriture binaire finie : la machine renvoie 0,300000000000000040{,}30000000000000004, et on compare toujours à une tolérance. »

Pourquoi : Un décimal fini n'a d'écriture binaire finie que si son dénominateur réduit est une puissance de 22. Un dixième vaut 110\dfrac{1}{10}, dont le dénominateur contient un 55.

7. Éteindre un bit avec un OU

1,5 point, et le programme fait le contraire de ce qu'il annonce

Ce qu'il ne faut pas écrire

« Pour mettre à zéro le bit 33, j'utilise un OU avec 000010000000\,1000. »

Ce qu'il faut écrire

« Le OU ALLUME. Pour éteindre, il faut un ET avec le masque INVERSÉ : 111101111111\,0111. »

Pourquoi : Chaque opérateur a un seul rôle : ET éteint, OU allume, OU EXCLUSIF bascule. Un OU avec un 11 ne peut jamais produire un 00.

8. Confondre un chiffre hexadécimal et un octet

1 point, et un calcul de taille d'image divisé par deux

Ce qu'il ne faut pas écrire

« La couleur FF\text{FF} tient sur un chiffre hexadécimal, donc sur 88 bits chacun : trois chiffres pour une couleur RVB. »

Ce qu'il faut écrire

« Un chiffre hexadécimal vaut 44 bits ; un octet en demande DEUX. Une couleur RVB s'écrit donc sur six chiffres hexadécimaux. »

Pourquoi : 16=2416=2^{4} : chaque chiffre hexadécimal code exactement quatre bits. C'est toute la raison d'être de cette base, qui rend le binaire lisible sans le trahir.

9. Oublier le biais ou le 1 implicite en IEEE 754

2 points, et un ordre de grandeur absurde

Ce qu'il ne faut pas écrire

« L'exposant stocké vaut 1000001110000011, soit 131131, donc le nombre est de l'ordre de 21312^{131}. »

Ce qu'il faut écrire

« L'exposant est BIAISÉ de 127127 : 131127=4131-127=4, donc le nombre est de l'ordre de 24=162^{4}=16. »

Pourquoi : Le biais permet de coder des exposants négatifs sans bit de signe supplémentaire. Et la mantisse s'écrit toujours avec un 11 devant la virgule, qui n'est pas stocké puisqu'il est certain.

Quelle méthode choisir

Quelle opération bit à bit pour quel effet

On lit ce que le programme doit faire aux bits visés.

  • Si mettre certains bits à zéro sans toucher aux autres ET avec un masque où les bits à éteindre valent 00

    Exemple : x ET 11110111x\ \text{ET}\ 1111\,0111 éteint le bit 33

  • Si mettre certains bits à un OU avec un masque où les bits à allumer valent 11

    Exemple : x OU 00001000x\ \text{OU}\ 0000\,1000 allume le bit 33

  • Si inverser certains bits OU EXCLUSIF avec un masque où les bits à basculer valent 11

    Exemple : appliqué deux fois, il redonne la valeur de départ

  • Si tester si un bit vaut 11 ET avec le masque, puis comparer le résultat à zéro

    Exemple : x ET 00001000x\ \text{ET}\ 0000\,1000 non nul signifie bit 33 allumé

  • Si multiplier ou diviser par une puissance de deux décalage à gauche ou à droite de kk rangs

    Exemple : décaler de 33 à gauche multiplie par 88

    à droite, c'est une division ENTIÈRE : les bits sortis sont perdus

Un masque s'écrit d'abord en binaire, puis se convertit en hexadécimal pour le code. L'écrire directement en hexadécimal est l'origine de la moitié des erreurs de masque.

Quelle interprétation donner à un motif de bits

On lit ce que l'énoncé dit du CONTEXTE, jamais le motif seul.

  • Si l'énoncé parle d'entier non signé, de taille ou de compteur somme des poids, de 00 à 2n12^{n}-1

    Exemple : 100101101001\,0110 vaut 150150

  • Si l'énoncé parle d'entier signé ou de complément à deux bit de tête à 11 signifie négatif : la valeur est motif2n\text{motif}-2^{n}

    Exemple : 100101101001\,0110 vaut 106-106

  • Si l'énoncé parle de nombre à virgule flottante découper 1+8+231+8+23, retirer le biais 127127, restituer le 11 implicite

    Exemple : exposant stocké 131131 pour un exposant réel 44

  • Si l'énoncé parle de texte, de caractère ou de touche code ASCII, un octet par caractère pour les 128128 premiers

    Exemple : 010000010100\,0001 est la lettre A, soit 6565

Le même motif de 88 bits peut valoir 150150, 106-106, un caractère ou une couleur. Nommer l'interprétation choisie avant de calculer vaut un point à chaque question de lecture.

La rédaction attendue

Le correcteur coche des étapes. Les voici dans l'ordre, avec la phrase de conclusion qu'il attend mot pour mot.

Convertir par divisions successives

Quand l'utiliser : L'énoncé demande de passer du décimal à une autre base, avec ou sans partie fractionnaire.

  1. 1 Poser les divisions les unes sous les autres, en écrivant à chaque ligne le quotient et le reste.
  2. 2 S'arrêter quand le quotient vaut 00, jamais avant.
  3. 3 Lire les restes DE BAS EN HAUT pour la partie entière, et l'écrire avec l'indice de base.
  4. 4 Pour la partie fractionnaire, multiplier successivement et lire les parties entières DE HAUT EN BAS.
  5. 5 Vérifier en recomposant par les poids.

Phrase de conclusion

« 13=1101213=1101_{2}, car 8+4+1=138+4+1=13. »

Le piège : Arrêter les divisions quand le quotient vaut 11 : le dernier reste, celui du poids fort, est alors perdu.

Barème : 1 point les divisions posées, 1 point le sens de lecture, 0,5 point la vérification par les poids.

Additionner en complément à deux et conclure sur le débordement

Quand l'utiliser : L'énoncé demande une addition sur nn bits signés, ou de dire si le résultat est correct.

  1. 1 Écrire les deux opérandes sur le MÊME nombre de bits, en complétant à gauche par le bit de signe.
  2. 2 Additionner bit à bit avec les retenues, et ignorer la retenue qui sort du rang le plus à gauche.
  3. 3 Lire le bit de signe du résultat et le comparer à ceux des opérandes.
  4. 4 Conclure : débordement seulement si les deux opérandes ont le même signe et le résultat le signe contraire.

Phrase de conclusion

« 100+50100+50 donne 100101101001\,0110, soit 106-106 : deux positifs donnant un négatif, il y a débordement, et le résultat est inutilisable. »

Le piège : Conclure au débordement parce qu'une retenue sort : c'est le critère du non signé, pas celui du complément à deux.

Barème : 1 point l'alignement, 1 point l'addition, 1 point le critère de signe, 1 point la conclusion.

Vérifier avant de rendre

Cinq minutes de vérification récupèrent plus de points qu'un exercice de plus commencé à la hâte.

L'exercice type décortiqué

Une addition qui déborde, sur huit bits signés

Un capteur additionne deux mesures, 100100 et 5050, dans une variable codée sur 88 bits en complément à deux.

Écrire l'addition en binaire, donner la valeur lue par le programme, et dire s'il y a débordement.

Étape 1

100=01100100100=0110\,0100 et 50=0011001050=0011\,0010, tous deux sur 88 bits.

Pourquoi

On écrit les deux opérandes sur le même nombre de bits avant toute chose : une addition sur des largeurs différentes n'a aucun sens et fait perdre le point d'alignement.

Étape 2

Somme bit à bit : 01100100+00110010=100101100110\,0100+0011\,0010=1001\,0110.

Pourquoi

L'addition binaire se pose exactement comme en décimal, avec des retenues. Ici aucune retenue ne sort du rang de tête, ce qui n'empêche rien.

Étape 3

Lecture non signée : 128+16+4+2=150128+16+4+2=150, ce qui est la somme attendue.

Pourquoi

Le motif est juste : la machine n'a pas fait d'erreur de calcul. Le problème vient de l'interprétation, pas de l'addition.

Étape 4

Lecture signée : le bit de tête vaut 11, donc la valeur est 150256=106150-256=-106.

Pourquoi

En complément à deux, un motif de tête à 11 se lit en retranchant 282^{8}. C'est la valeur que le programme utilisera réellement.

Étape 5

Critère : deux opérandes positifs, résultat négatif, donc DÉBORDEMENT.

Pourquoi

Le critère porte sur les signes, jamais sur la retenue sortante. Ici l'intervalle signé s'arrête à 127127, et 150150 le dépasse.

Étape 6

Contrôle : 106+256=150-106+256=150, et 150>127150>127.

Pourquoi

Les deux relations confirment l'une le motif, l'autre le diagnostic. Sur 1616 bits, la même addition ne déborderait pas, puisque la limite serait 3276732\,767.

Conclusion rédigée

« Le motif obtenu est 100101101001\,0110 ; lu en complément à deux sur 88 bits, il vaut 106-106. Deux opérandes positifs donnant un résultat négatif, il y a débordement : la variable doit être codée sur 1616 bits. »

L'erreur classique sur cet exercice : Répondre 150150 parce que le motif vaut bien 150150 : la question porte sur la valeur LUE par un programme qui interprète en complément à deux.

À savoir par cœur

  • Divisions successives : restes DE BAS EN HAUT. Partie fractionnaire : parties entières DE HAUT EN BAS.
  • Un chiffre hexadécimal vaut 44 bits, un octal 33 bits ; on découpe toujours depuis la DROITE.
  • Complément à deux : inverser PUIS ajouter 11 ; le motif de x-x vaut 2nx2^{n}-x en non signé.
  • Sur nn bits : non signé de 00 à 2n12^{n}-1, signé de 2n1-2^{n-1} à 2n112^{n-1}-1.
  • Débordement signé : deux opérandes de MÊME signe et un résultat de signe contraire. La retenue sortante ne prouve rien.
  • ET éteint, OU allume, OU EXCLUSIF bascule. Décalage à gauche multiplie, à droite divise en entier.
  • IEEE 754 : 1+8+231+8+23 bits, exposant biaisé de 127127, 11 implicite, entiers exacts jusqu'à 2242^{24}.

Questions fréquentes

Dans quel sens lit-on les restes des divisions successives ?

De bas en haut, c'est-à-dire du dernier reste obtenu vers le premier. Le premier reste correspond au chiffre de poids le plus faible, puisque la première division porte sur les unités. On s'arrête seulement quand le quotient devient nul, sinon le chiffre de poids fort est perdu.

Comment écrire un nombre négatif en complément à deux ?

On écrit d'abord sa valeur absolue en binaire sur le nombre de bits voulu, puis on inverse tous les bits, et enfin on ajoute un. Le motif obtenu, lu comme un entier non signé, vaut deux puissance n moins le nombre de départ, ce qui donne une vérification immédiate.

Comment savoir s'il y a débordement ?

En comparant les signes. Il y a débordement signé lorsque les deux opérandes ont le même signe et que le résultat porte le signe contraire. Une retenue sortant du rang de tête ne prouve rien en complément à deux : elle signale un débordement seulement dans l'interprétation non signée.

Pourquoi 0,1 plus 0,2 ne fait pas exactement 0,3 en machine ?

Parce qu'un décimal n'a une écriture binaire finie que si son dénominateur réduit est une puissance de deux. Un dixième a un cinq au dénominateur, donc son écriture binaire est infinie et la machine l'arrondit. L'erreur d'arrondi survit à l'addition, d'où la règle de toujours comparer deux flottants à une tolérance près.

Combien de bits vaut un chiffre hexadécimal ?

Quatre exactement, puisque seize est deux puissance quatre. Un octet demande donc deux chiffres hexadécimaux, et une couleur en rouge vert bleu, qui occupe trois octets, s'écrit sur six chiffres. Le découpage en paquets de quatre bits se fait toujours à partir de la droite, en complétant à gauche par des zéros.

Passer à la pratique

Exercices corrigés : Systèmes de numération informatique

Une méthode se prouve sur une copie, pas sur une fiche. La série du même chapitre reprend chacun de ces pièges dans un exercice, avec le corrigé rédigé étape par étape.

  • 12 exercices corrigés
  • 120 points
  • 180 minutes
Faire les exercices
Fiche précédente Logique booléenne et mathématique Fiche suivante L'arithmétique modulaire

Ce chapitre resservira dans

Les chapitres qui le réclament en amont, plus tard dans l'année ou dans les années suivantes.

Voir aussi

Vous suivez le cours 201-N11 en informatique au cégep ?

Contactez-moi pour une première séance. Bachelier en informatique de McGill et maître en informatique appliquée de Concordia, je fais travailler la numération sur ce qui se casse en vrai : les débordements silencieux et les comparaisons de flottants.

Site par Studio Squalli