Le complément à 2 ne réalise pas la soustraction à lui tout seul, c'est ce que j'ai voulu dire.
Mais il permet de passer par une addition au lieu d'une soustraction.
Les exemples de calcul avec cette technique qu'on trouve sur Internet expliquent rarement (ou mal) pourquoi cela fonctionne.
Voici un peu de théorie.
Un nombre binaire composé de
n bits peut prendre
2n valeurs, allant de
0 (valeur mini) à
2n-1 (valeur maxi).
A ce stade on oublie l'histoire du bit de signe, on travaille uniquement avec des valeurs absolues.
Lorsqu'on fait le complément d'un nombre binaire
a , on obtient la
valeur maxi - a c'est-à-dire
2n- 1 - a .
Avec le complément à 2, comme on ajoute 1, on obtient donc
2n - a . En notant
a' le complément à 2 de
a , on a alors
a' = 2n - a .
Pour passer d'une soustraction
b - a à une addition, on pose
b - a = b - 2n + 2n - a = b - 2n + a' .
Donc réaliser la soustraction
b - a équivaut à additionner
b + a' et soustraire le bit 2
n.
exemple de calcul binaire |
1001 - 11 |
= 1001 - 0011 | * on aligne le nombre de bits du plus petit nombre sur celui du plus grand (soit 4 bits) avant de réaliser le complément |
= 1001 + 1100 + 1 - 10000 | * le complément de 0011 est 1100, on ajoute 1 pour obtenir le complément à 2, et on soustrait le bit qui vaut 24 |
= 10110 - 10000 | * soustraire le bit valant 24 revient donc à le supprimer pour revenir à une valeur sur 4 bits. |
= 0110 | * en supprimant le 0 non significatif, on obtient donc 110 |
De nombreux exemples sur Internet "cachent" la valeur 2
n à soustraire jusqu'à la dernière étape du calcul, où on dit qu'il faut "ignorer" la retenue, comme par magie.
kadauto a écrit : ↑03 sept. 2020, 18:46
J'ai toujours lu que les soustractions à l'aide du compléments à 2 sont plus facile que les soustractions bit à bit.
Je ne trouve pas plus difficile de poser une soustraction binaire que de faire un complément à 2 suivi d'une addition.
Effectivement, en fonction des valeurs utilisées et de la maîtrise que l'on a des techniques de calcul, la méthode la plus rapide ne sera pas toujours la même.
Quand on calcule par exemple 1010 - 10 = 1000, la soustraction se fait naturellement (de tête) sans nécessité d'utiliser le complément à 2.