# Ecriture binaire d'un entier relatif ## Rappels * nous avons déjà vu comment écrire en binaire un nombre entier **positif** ; * un entier relatif est un entier positif ou négatif. ## Première approche Soit un entier est positif, soit il est négatif donc il est naturel de stocker le signe de cet entier dans un bit. Ainsi, le bit 1 peut désigner un entier négatif et 0 un entier positif. Exemple : 1210 = 8 + 4 = 11002 donc +12 peut être représenté sur 5 bits par [0](red)1100 et -12 peut être représenté par [1](red)1100. Cependant, cette première approche pose des problèmes : * le nombre 0 a deux représentations : [0](red)0 et [1](red)0 ; * 11100 est aussi une représentation binaire du nombre positif 16 + 8 + 4 = 28 : il faut donc définir sur combien de bits nous allons écrire les nombres. Par exemple, si nous codons les entiers sur 1 octet : * le premier bit (celui de gauche) est réservé pour le signe ; * les 7 bits restants permettent de coder les nombres ; * ceci permet de coder les nombres de -(27-1) = -127 à 27-1 = 127 soit 255 entiers (0 est représenté deux fois) : il y a perte d'un nombre par rapport à la représentation des entiers positifs (256 nombres). Supposons pour simplifier que je choisisse de coder sur trois bits : * quelle est la représentation binaire de 3 ? * quelle est celle de -3 ? * que donne l'addition des deux ?
## Représentation des entiers négatifs avec le complément à 2 Supposons que nous codions les entiers sur 3 bits (par exemple si nous travaillions sur une machine antique avec très peu de mémoire !). Alors, lors d'une addition, les retenues qui dépassent cette capacité seraient perdues. Restons sur l'exemple de a = 3 et cherchons comment écrire le nombre b = -3 ; il faut que la somme des deux fasse 0 (ce qui n'est possible qu'avec un 1 qui sort de la capacité de 3 bits) :
011← a
...... ← b
1000 ← c
Cherchez l'écriture binaire de b.
Voici une technique pour obtenir rapidement le [complément à 2](red) sur *n* bits d'un nombre *x* : * si *x* est positif, on écrit simplement sa représentation binaire habituelle sur *n* bits ; * si *x* est négatif : * retirer le signe de *x*, ce qui donne un nombre positif *a* (la valeur absolue de *x*) qu'on écrit en binaire sur *n* bits (pensez à compléter avec des zéros à gauche si nécessaire) ; * changer, dans l'écriture binaire de *a*, tous les 0 en 1 et inversement ; * ajouter 1 au résultat. Exemple : donner une représentation binaire de -1410 avec un complément à 2 sur 5 bits. Réponse : 1410 = 8 + 4 + 2 = 11102 donc 011102 sur 5 bits ; 01110 → 10001 ; 10001 + 1 = 100102 est une représentation de -1410. Donnez l'écriture binaire sur un octet des entiers relatifs suivants, donnés sous forme décimale : * 31 * -113 * -59 * 150