Binaire, inverse et compléments

Binaire, complément à un (inverse) et complément à deux (le calculateur a été créé suite à la demande d'un utilisateur)

Notre utilisateur nous a demandé de créer un calculateur en ligne pour convertir les nombres entiers saisis sous leur forme binaire et afficher également leur inverse et leur complément à deux /743/.

Ci-dessous se trouve le calculateur qui réalise cette tâche. Il prend en charge les nombres positifs et négatifs et donne les codes binaires mentionnés ci-dessus.

Comme d'habitude, les explications sont en dessous du calculateur

Mise à jour : D'après les commentaires, j'ai pu voir que les gens interprétaient mal les résultats du calculateur. C'était une erreur de ma part. Le calculateur n'appliquait pas l'algorithme sur tous les nombres entiers saisis. Je l'ai désormais modifié pour éviter toute confusion. Maintenant, pour les nombres positifs il montre une représentation binaire du nombre (puisqu'il n'y a ni inverse ni complément pour les nombres positifs) et pour les nombres négatifs il montre sa représentation positive, son inverse et son complément à deux.

PLANETCALC, Binaire, inverse et compléments

Binaire, inverse et compléments

Intervalle
 
Code binaire
 
Code inverse (complément à un)
 
Complément à deux
 

Ainsi, voici la théorie

Le code binaire est la représentation binaire d'un entier sans signe. Si l'on se réfère à l'informatique, il y a un certain nombre de bits utilisés pour représenter le nombre. Ainsi, l'intervalle total pouvant être représenté par n-bits est de 2^n

L'inverse ou complément à un est simplement le code binaire inversé d'un nombre. Tous les zéros deviennent des uns et tous les uns deviennent des zéros.

Le complément à deux est le code inversé plus un

Mais à quoi cela sert-il ?

Ces codes ont été inventés avant de faciliter les opérations avec des signes (pour les machine). Comme j'ai apprendre via des exemples, je vais expliquer cela par des exemples.

Assumons que nous ayons un ordinateur de 4-bits pour les nombres binaires. L'intervalle total peut être représenter par 4-bits soit 16 - 0,1... 15
00 - 0000
...
15 - 1111

Néanmoins, il s'agit de nombres sans signes et cela n'est pas très utile. Nous devons introduire le signe. Ainsi, la moité de l'intervalle est pris pour les nombres positifs (jusqu'à huit, zéro inclus) et la moité pour les négatifs (huit également). Notez que la machine considère zéro comme un nombre positif, contrairement aux mathématiques courants.

Ainsi nos nombres positifs sont 0,...,7 et nos nombres négatifs sont -1,...,-8.

Pour distinguer les nombres positifs des nombres négatifs, nous assignons le bit restant le plus à gauche as un bit de signe.
Zéro dans le bit de signe indique qu'il s'agit d'un nombre positif et un qu'il s'agit d'un nombre négatif.

Les nombres positifs sont représentés par un code binaire complet.
0 - 0000
1 - 0001
...
7 - 0111

Néanmoins, comment sont représentés les nombres négatifs ? Voici où le complément à deux entre en compte.

C'est, le complément de -7 est
binaire 7 = 0111
inverse 7 = 1000
complément à deux 7 = 1001

Notez que le binaire 1001 est 9, qui diffère de -7 par 16, ou 2^4. Ou, qui est le même code complément binaire que 2^n, soit 7+9=16

Ceci est très utile pour les calculs par des machines - l'usage de compléments pour représenter les nombres négatifs permet aux ingénieurs d'utiliser le symbole d'addition pour les additions et les soustractions, simplifiant ainsi le design d'ULA (unité arithmétique et logique - partie du processeur). De plus, cette représentation détecte facilement les excédents, et s'il n'y a pas assez de bits pour représenter le nombre donné.

Plusieurs exemples

7-3=4
0111 binaire 7
1101 complément à deux de 3
0100 résultat de l'addition 4

-1+7=6
1111 complément à deux de 1
0111 binaire 7
0110 résultat de l'addition 6

L'excédent est détecté en regardant les deux derniers reports, dont le report au-delà du bit le plus à droite. Si le bit de report est 11 ou 00, il n'y a pas d'excédent, si le bit de report est 01 ou 10, il y a un excédent.
S'il n'y a pas d'excédent, le report au delà du bit le plus à droite peut être ignoré en toute sécurité.

Quelques exemples avec des reports et un cinquième bit (bit au-delà du bit le plus à droite)

7+1=8

00111 binaire 7
00001 binaire 1
01110 reports
01000 résultat de l'addition 8 - excédent

Les deux derniers reports sont 01. Cela engendre le signal d'un excédent

-7+7=0
00111 binaire 7
01001 complément à deux de 7
11110 reports
10000 résultat de l'addition 16 - mais le cinquième bit peut être ignoré, le résultat réel est 0

Les deux derniers reports sont 11. Il n'y a pas d'excédent, donc le bon résultat est zéro.

Le contrôle de l'excédent peut être faire par une simple analyse des deux derniers bits.

Du fait de ces propriétés très utiles, le complément à deux est la méthode la plus souvent utilisée pour représenter les nombres négatifs sur des ordinateurs.

P.S. Le code inverse ou le complément à un ou "compléments" du code binaire de 2^n-1, (tous identiques). Il peut également être utilisé pour représenter les nombres négatifs, mais les additions doivent utiliser des reports cycliques et sont plus complexes. De plus, l'intervalle pouvant être représenter par n-bits est réduit de 1, puisque 1111 est occupé comme inverse de 0000 - zéro négatif. Ainsi c'est moins pratique.

URL copiée dans le presse-papiers
PLANETCALC, Binaire, inverse et compléments

commentaires