8 / 37 · Concept
Complément à deux, extension de signe et dépassement
Distinguer interprétation signée et dépassement d'addition par des équations et contre-exemples.
Les leçons sont gratuites. Inscrivez-vous pour enregistrer vos progrès.
Le poids du bit le plus significatif change
Un entier de bits en complément à deuxComplément à deux Représentation d'un entier signé par un motif de largeur fixe. Sur n bits, la plage va de −2^(n−1) à 2^(n−1)−1. s'interprète ainsi :
1010 sur quatre bits vaut 10 en non signéNon signé Interprétation d'un motif de bits comme entier non négatif. Sur n bits, la plage va de 0 à 2^n−1 et peut différer de l'interprétation signée du même motif. En savoir plus et -6 en signé. Il ne faut pas retirer le bit de signe et lire le reste comme une valeur absolue. À largeur fixe, s'obtient en inversantNégation L'opération NOT échange 0 et 1. Une barre au-dessus d'une expression applique NOT à toute l'expression qu'elle couvre. En savoir plus les bits puis en ajoutant 1 ; cependant, +8, opposé du minimum -8, n'existe pas dans la plage signée sur quatre bits.
Une extension doit préserver la valeur
L'extension non signée ajoute des zéros ; l'extension signée répète le bit de signe. Étendre 1010 en 00001010 donne +10, tandis que 11111010 donne -6. Selon l'interprétation, élargir le même motif demande un circuit différent.
logic signed [3:0] a, b;
logic signed [4:0] exact;
logic [3:0] result;
logic overflow;
assign exact = {a[3], a} + {b[3], b};
assign result = exact[3:0];
assign overflow = (a[3] == b[3]) && (result[3] != a[3]);Cet exemple additionne deux opérandes signés sans retenue entrante. exact conserve la somme sur cinq bits, puis vérifie le signe du résultat réduit.
La valeur initiale 11111010 représente à la fois 250 non signé et −6 signé. En changeant b7, les deux valeurs évoluent en sens opposés.
11111010 → unsigned 250 · signed -6 · hex 0xFA
Retenue et dépassement signé sont différents
Additionner deux valeurs de même signe et obtenir le signe opposé indique un dépassement. Sur quatre bits, est stocké comme 1010, soit -6, et comme 0111, soit +7. Deux opérandes de signes différents ne produisent pas ce dépassement.
Mélanger signé et non signé en RTL rend les règles de comparaison et d'extension délicates. Explicitez largeur et caractère signé des opérandes ; testez minimum, -1, 0 et maximum.
Essayez vous-même
Sur quatre bits signés, donnez le motif stocké et le dépassement de puis . Expliquez aussi la négation de .
Lire l’explication
vaut 1001, sans dépassement. 10 est hors plage et devient 1010 (-6), avec dépassement. Inverser -8 et ajouter 1 laisse 1000, car +8 n'est pas représentable ; ce n'est pas un calcul de valeur absolue valide.