Contenus | Capacités attendues | Commentaires |
---|---|---|
Représentation binaire d'un entier relatif | Évaluer le nombre de bits nécessaires à l'écriture en base 2 d'un entier, de la somme ou du produit de deux nombres entiers. Utiliser le complément à 2. | Il s'agit de décrire les tailles courantes des entiers (8, 16, 32 ou 64 bits). Il est possible d'évoquer la représentation des entiers de taille arbitraire de Python. |
Jusqu'à maintenant, nous avons appris à représenter des entiers naturels en représentation binaire ou hexadécimale.
Ainsi en utilisant des mots binaires de n bits, on peut coder nombres entiers.
Par exemple sur un octet, soit 8 bits, on peut coder valeurs soit dans le cas des entiers naturels des nombres de 0 à 255.
Cependant dans de nombreux programmes, il est nécessaire d'utiliser d'autres types de nombres comme les entiers relatifs ou les réels.
La façon la plus simple de procéder serait de réserver le bit de poids fort pour le signe(0 pour positif et 1 pour négatif), et de garder le rester pour la représentation de la valeur absolue du nombre.
Avec un codage utilisant des mots de n bits, on pourrait représenter des nombres entre et .
Par exemple, avec un codage sur 3 bits, des nombres entre -3 et 3:
Représentation binaire | Valeur décimale |
---|---|
000 | +0 |
001 | +1 |
010 | +2 |
011 | +3 |
100 | -0 |
101 | -1 |
110 | -2 |
111 | -3 |
Malheureusement cette représentation possède deux inconvénients. Le premier (mineur) est que le nombre zéro (0) possède deux représentations. L'autre inconvénient (majeur) est que cette représentation impose de modifier l'algorithme d'addition ; si un des nombres est négatif, l'addition binaire usuelle donne un résultat incorrect. Voir l'article de Wikipedia pour plus de détails
Cette méthode permet de remédier aux problèmes évoqués ci-dessus.
On utilise toujours un bit de signe tout à gauche:
L'entier négatif est codé comme s'il s'agissait de l'entier ou n est la taille du mot.
Il est possible d'appliquer un algorithme simple pour réaliser cette addition en binaire (cette méthode sera désignée comme 2e méthode par la suite).
Avec ce codage utilisant des mots de n bits, on pourrait représenter des nombres entre et .
[Article Wikipedia sur le complément à deux]{.cite-source}
Utilisons cet encodage sur 3 bits.
001
sur 3 bits.110
111
Les deux méthodes donnent le même résultat:
Avec un codage sur 3 bits, on peut coder des nombres entre et .
Représentation binaire | Valeur décimale |
---|---|
000 | +0 |
001 | +1 |
010 | +2 |
011 | +3 |
100 | -4 |
101 | -3 |
110 | -2 |
111 | -1 |
On peut alors vérifier avec cette notation que l'algorithme d'addition utilisé pour les entiers naturels donne des résultats corrects avec cette représentation(voir les exercices[./exo]).
Pour connaitre le nombre que représente un entier négatif, on effectue la démarche inverse:
Ce qui revient à lui soustraire .