Exercice 1 : Binaire, hexadécimal et complément à deux
Un ordinateur ne connaît que des suites de bits. Tout le reste, entiers positifs, entiers négatifs, adresses, couleurs, est une CONVENTION d'interprétation de ces suites, et c'est la convention qu'il faut connaître.
- a) Convertissez 45 en binaire sur 8 bits, puis en hexadécimal. Détaillez la méthode des divisions successives et la vérification.
- b) La suite 11010011 est lue par deux programmes différents, l'un qui l'interprète comme un entier naturel, l'autre comme un entier relatif en complément à deux. Donnez les deux valeurs.
- c) Écrivez moins 45 en complément à deux sur 8 bits. Détaillez la construction, puis vérifiez en additionnant 45 et son opposé.
- d) Donnez l'intervalle des entiers représentables sur 8 bits en complément à deux, et le nombre de valeurs. Pourquoi l'intervalle n'est-il pas symétrique ?
- e) Un programme calcule 100 plus 50 sur 8 bits signés. Quel résultat obtient-il ? Comment s'appelle ce phénomène et comment le détecte-t-on ?
Voir la correction
Réponses
- a) 45 = 00101101 = 0x2D
- b) 211 ou −45 selon la convention
- c) Inverser puis ajouter 1 : 11010011
- d) De −128 à 127 : 256 valeurs
- e) 100 + 50 donne −106 : débordement
a) Divisions successives par 2 : , , , , , . On lit les restes du dernier au premier : 101101, donc 00101101 sur 8 bits. Vérification : . En hexadécimal, on regroupe les bits par quatre depuis la droite : 0010 et 1101, soit 2 et D, donc 0x2D. Vérification : .
b) Comme entier naturel, vaut . Comme entier relatif en complément à deux, le bit de poids fort valant 1, le nombre est négatif : sa valeur est . On peut aussi le retrouver en inversant tous les bits, ce qui donne 00101100 soit 44, puis en ajoutant 1 pour obtenir 45, et en mettant le signe moins. La même suite de huit bits vaut donc 211 ou moins 45 selon la seule convention retenue, et rien dans la mémoire ne dit laquelle est la bonne.
c) On part de 45, soit 00101101. On inverse tous les bits : 11010010. On ajoute 1 : 11010011. C'est bien la suite de la question b, ce qui confirme le résultat. Vérification par addition : donne 100000000 sur neuf bits ; le neuvième bit sort de la largeur du registre et est perdu, il reste 00000000, c'est-à-dire zéro. C'est exactement l'intérêt du complément à deux : la soustraction se fait avec le circuit d'addition, sans matériel supplémentaire.
d) L'intervalle est de à , soit valeurs. Il n'est pas symétrique parce que le zéro occupe une place du côté positif : les 256 combinaisons se répartissent en 128 valeurs dont le bit de poids fort vaut 0, à savoir 0 à 127, et 128 valeurs dont ce bit vaut 1, à savoir à . Le côté positif perd donc une place au profit du zéro. Conséquence pratique : l'opposé de n'est pas représentable, et le calculer redonne , ce qui surprend toujours.
e) , qui dépasse 127 : le résultat ne tient pas. En binaire, , dont le bit de poids fort vaut 1 : lu en complément à deux, cela donne . Le programme obtient donc moins 106 en additionnant deux nombres positifs. Le phénomène s'appelle le DÉBORDEMENT. On le détecte à un signe caractéristique : additionner deux nombres de même signe et obtenir un résultat de signe opposé est impossible en arithmétique exacte, donc c'est la signature du débordement. Les processeurs disposent d'ailleurs d'un indicateur dédié, que les langages de haut niveau choisissent le plus souvent d'ignorer.