8 / 37 · Concetto
Complemento a due, estensione del segno e overflow
Distinguere interpretazione signed e overflow dell’addizione con formule e controesempi.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
Cambia il peso del bit più significativo
Un intero in complemento a dueComplemento a due Rappresentazione di interi con segno a larghezza fissa. Con n bit il campo è da −2^(n−1) a 2^(n−1)−1. a bit si interpreta così:
I quattro bit 1010 valgono 10 unsignedUnsigned Interpretazione dei bit come intero non negativo. Il campo a n bit è 0–2^n−1 e può differire dalla lettura signed degli stessi bit. Approfondisci e −6 signed. Non si legge il bit di segno separatamente trattando gli altri come valore assoluto. A larghezza fissa, si ottiene invertendoInversione NOT scambia 0 e 1. Una barra superiore applica NOT all’intera espressione sottostante. Approfondisci i bit e aggiungendo 1; tuttavia il positivo +8 del minimo −8 non esiste nello stesso intervallo signed a quattro bit.
L'estensione deve conservare il valore
L'estensione unsigned aggiunge zeri a sinistra, quella signed replica il bit di segno. Da 1010, 00001010 rappresenta +10 e 11111010 rappresenta −6. Estendere gli stessi bit richiede circuiti diversi secondo l'interpretazione.
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]);L'esempio somma due operandi signed senza carry in ingresso. Conserva la somma a cinque bit in exact e controlla il segno del risultato ridotto.
Il valore iniziale è 11111010: unsigned 250 e signed −6 condividono gli stessi bit. Cambiando b7, le due interpretazioni variano in direzioni opposte.
11111010 → unsigned 250 · signed -6 · hex 0xFA
Carry e overflow signed sono diversi
Se operandi dello stesso segno producono un risultato di segno opposto, c'è overflow. A quattro bit, si memorizza come 1010, apparentemente −6, e come 0111, apparentemente +7. Due numeri di segno diverso non producono questo superamento di campo.
Mescolare signed e unsigned in RTL rende insidiose le regole di confronto ed estensione. Esplicitate larghezza e segno dei due operandi e includete minimo, −1, 0 e massimo nei test di confine.
Prova tu
Calcolate bit memorizzati e overflow per e a quattro bit signed. Spiegate anche la negazione di .
Leggi la spiegazione
è 1001 senza overflow. 10 è fuori intervallo e si memorizza come 1010 (−6): overflow. Invertendo −8 e aggiungendo 1 resta 1000, perché +8 non è rappresentabile. Non è un calcolo valido del valore assoluto.