Aller au contenu

Excess-3

Un article de Wikipédia, l'encyclopédie libre.

Le code décimal binaire Excess-3 (XS-3), ou code de Stibitz, est un système de numération biaisé, utilisé principalement par d'anciens processeurs pour la représentation des nombres en base 10.

Les représentations biaisées, ou Excess-N, sont des systèmes qui utilisent un nombre N prédéfini comme nombre biaisant, c'est-à-dire comme décalage avec la représentation canonique. En XS-3, les nombres sont représentés par 4 bits pour chaque chiffre décimal, chaque chiffre étant représenté par les quatre bits de sa représentation binaire, additionné de 3. Le code XS-3 d'un nombre est donc similaire à son code BCD, à la différence que chaque groupe de quatre bits est incrémenté de 3 :

Decimal Binary Decimal Binary
0 0011 9 1100
1 0100 8 1011
2 0101 7 1010
3 0110 6 1001
4 0111 5 1000

Ainsi, la représentation XS-3 de 127 est 010001011010 (0100, 0101, 1010) ; en comparaison, la représentation BCD de 127 est 000100100111 (0001, 0010, 0111).

L’avantage principal de l’encodage XS-3 sur l’encodage BCD est que l'on peut calculer le complément à 9 d’un nombre décimal aussi facilement qu’on peut calculer le complément à 1 d’un nombre binaire, simplement en inversant les bits. Cette propriété est particulièrement utile pour réaliser des soustractions. Toutefois, cela se fait au prix d'un algorithme moins naturel concernant l'addition. En effet, la simple addition binaire de deux chiffres XS-3 n'a pas pour résultat la représentation XS-3 de leur addition. Par exemple 1+2=3, mais l'addition binaire de leur représentation donne 0100+0101 = 1001 (représentation XS-3 de 6). Un additionneur binaire classique ne peut donc pas être utilisé comme additionneur de nombres XS-3.

Pour additionner deux chiffres XS-3, il faut additionner leurs représentations binaires, puis retrancher 3 s'il n'y a pas d'overflow (si le résultat n'utilise pas 5 bits), ou au contraire ajouter 3 s'il y a overflow ; dans ce dernier cas, après l'addition de 3, les 4 bits de poids faibles du résultat forment le chiffre de poids faible de l'addition, et une retenue de 1 devra être ajoutée à l'addition des chiffres de poids plus fort.

Si l'on considère par exemple l'addition 127+15 = "0100-0101-1010" + "0011-0100-1000".

Pour effectuer cette opération, on additionne en premier les chiffres de poids le plus faible, 7+5 : "1010"+"1000" = "10010". Comme il y a overflow, on ajoute encore 3 au résultat binaire. "10010"+"11" = "10101". Les 4 bits de poids faible forment la représentation XS-3 du chiffre de poids faible de l'addition : "0101". Et l'addition suivante nécessitera une retenue.

On additionne ensuite les chiffres de poids supérieur, 2+1 (+ retenue 1) : "0101"+"0100"+1 = "1010". Puisqu'il n'y a pas d'overflow on retranche cette fois 3 au résultat : "1010"-"11" = "0111", et l'addition suivante se fera sans retenue.

Enfin, on additionne les chiffres de poids encore supérieur, 1+0 : "0100"+"0011" = "0111". Puisqu'il n'y a pas d'overflow, on retranche encore 3 à ce résultat. "0111"-"11" = "0100".

La représentation XS-3 de 127+15 est donc "0100-0111-0101", ce qui est bien la représentation XS-3 de 142.

Articles connexes

[modifier | modifier le code]