Numeri binari e complemento a due
In questa pagina 6
Tutti i dati di un processore sono numeri binari: non solo le quantità numeriche, ma anche le istruzioni, i caratteri di un testo, i pixel di una figura. I circuiti che elaborano numeri binari sono semplicissimi ed economici. Questa nota raccoglie ciò che serve prima di parlare di virgola fissa (Virgola fissa - formati n.m e normalizzazioneIn virgola fissa il processore fa aritmetica sugli interi (con segno) e il fattore di scalacostante per cui si moltiplica un valore reale per ottenere l'intero memorizzato $2^{m}$ resta sottinteso: il formato n.m dice che dei bit disponibili $n$ sono la parte intera (compreso il segno se il numero è con segno, S; nessun segno se U) e $m$ la parte frazionaria. Il valore è $\text{codice}/2^m$. Passare dal formato n.m al decimale, o viceversa, è il calcolo più frequente dell'esame: su 16 bit $\text{valore}=\text{codice}/2^m$, l'intervallo è $[0,2^n)$ (U) oppure $[-2^{n-1},2^{n-1})$ (S), la risoluzione è $2^{-m}$.Virgola fissa - formati n.m e normalizzazione →).
Notazione posizionale e conversioni
Un numero in base si scrive , con cifrei simboli ammessi in una base: 0 e 1 in binario, da 0 a F in esadecimale (); si scrive . In binario e le cifre (bitbinary digit: una cifra binaria, 0 oppure 1) sono 0 e 1. Si usa molto anche la base 16 (esadecimalesistema in base 16: ogni cifra vale 4 bit), con cifre - e - (): 4 bit corrispondono a una cifra esadecimale, quindi la conversione binario-esadecimale è immediata. Per rappresentare un numero decimale di cifre servono circa bit (perché ).
- Da decimale a binario (intero): si divide per 2 annotando i resti, e si leggono i resti dal basso. , , , , , : .
- Da binario a decimale: si raddoppia il risultato parziale e si somma il bit corrente (schema di Hornercalcolo di un polinomio con una moltiplicazione e una somma per ogni coefficiente): : . Quindi .
- Frazione da decimale a binario: si raddoppia la parte frazionaria e si annota la parte intera: ; ; ; : . Il numero di cifre dopo la virgola dipende dalla base: in binario ha infinite cifre.
- In esadecimale: : , , , quindi ; per la frazione , , : .
Le tabelline binarie sono banali: , , con riportobit che si trasferisce alla colonna successiva quando una somma supera la cifra massima 1; prodotto = AND. Addizione e sottrazione si fanno come a mano, colonna per colonna (, cioè ).
Lunghezza di parola e accuratezza
Un processore usa un numero fissato di bit (4, 8, 16, 32 per i µC, fino a 256 per alcuni DSP). La lunghezza di parola non ha alcuna relazione con l'accuratezza dei calcoli: un processore a 4 bit può calcolare con la stessa accuratezza di uno a 128 bit, solo molto più lentamente (eseguendo i calcoli a pezzi) e con costo diverso. L'accuratezza dipende da come si rappresentano i numeri (Virgola fissa - formati n.m e normalizzazioneIn virgola fissa il processore fa aritmetica sugli interi (con segno) e il fattore di scalacostante per cui si moltiplica un valore reale per ottenere l'intero memorizzato $2^{m}$ resta sottinteso: il formato n.m dice che dei bit disponibili $n$ sono la parte intera (compreso il segno se il numero è con segno, S; nessun segno se U) e $m$ la parte frazionaria. Il valore è $\text{codice}/2^m$. Passare dal formato n.m al decimale, o viceversa, è il calcolo più frequente dell'esame: su 16 bit $\text{valore}=\text{codice}/2^m$, l'intervallo è $[0,2^n)$ (U) oppure $[-2^{n-1},2^{n-1})$ (S), la risoluzione è $2^{-m}$.Virgola fissa - formati n.m e normalizzazione →) e da quanti bit si usano nei risultati intermedi.
Rappresentazione dei numeri negativi
Con bit si rappresentano i naturali . Per i negativi servono codifiche:
- modulo e segnocodifica con un bit di segno e il valore assoluto sugli altri bit: un bit di segnoil bit più significativo: vale 1 per i negativi e bit di modulo; , due rappresentazioni dello zero. Si usa solo per la mantissa dei numeri a virgola mobile (Virgola mobile - formato IEEE 754 e formato a 16 bitIn virgola mobile un numero è $(-1)^S,(1+F),2^{E-B}$: segno $S$, mantissa frazionaria $F$ (con l'$1$ iniziale implicito) ed esponente $E$ con offset $B$. La precisione relativa è costante ($\varepsilon=2^{-n_F}$) e cambia la spaziatura tra i valori; in $n$ bit si rappresentano gli stessi $2^n$ numeri della virgola fissa, ma distribuiti diversamente. Nello standard IEEE 754 a 32 bit: 1 bit di segno, 8 di esponente ($B=127$), 23 di mantissa. All'esame compare un formato a 16 bit (1+4+11, $B=7$): codifica, decodifica e somma con allineamento degli esponenti. Il campo esponente tutto a 0 con mantissa nulla è lo zero.Virgola mobile - formato IEEE 754 e formato a 16 bit →).
- complemento a 1codifica in cui il negativo si ottiene invertendo tutti i bit del positivo: i negativi si ottengono invertendo bit a bit i positivi; due zeri. Quasi abbandonato.
- complemento a 2codifica dei numeri con segno: il negativo di N su n bit è 2 elevato a n meno N: la codifica usata in tutti i processori.
Complemento a due
Il complemento a 2 di su bit è per definizione Proprietà: rappresenta tutti gli con ; ha un solo zero (); il bit più significativo è il bit di segno; unifica somma e sottrazione in un solo circuito, perché .
Calcolo pratico: si invertono tutti i bit (operatore ) e si somma 1: Esempio su 5 bit: ; oppure .
Dimostrazione. Si ha . Ma è la stringa ( uni) e, bit per bit, (sottrarre da 1 un bit lo nega). Quindi e .
Conseguenze. (modulo ): cioè . Inoltre , cioè .
Interpretazione del valore. Una stringa in complemento a 2 vale cioè è un normale numero binario con il peso del bit più significativo cambiato di segno. La stessa stringa può quindi avere più significati: è se interpretata come naturale, in complemento a 2 su 8 bit; e, come frazione con segno, (fattore di scala ) oppure (fattore ). Senza conoscere la normalizzazione è impossibile decodificare un numero (nota Virgola fissa - formati n.m e normalizzazioneIn virgola fissa il processore fa aritmetica sugli interi (con segno) e il fattore di scalacostante per cui si moltiplica un valore reale per ottenere l'intero memorizzato $2^{m}$ resta sottinteso: il formato n.m dice che dei bit disponibili $n$ sono la parte intera (compreso il segno se il numero è con segno, S; nessun segno se U) e $m$ la parte frazionaria. Il valore è $\text{codice}/2^m$. Passare dal formato n.m al decimale, o viceversa, è il calcolo più frequente dell'esame: su 16 bit $\text{valore}=\text{codice}/2^m$, l'intervallo è $[0,2^n)$ (U) oppure $[-2^{n-1},2^{n-1})$ (S), la risoluzione è $2^{-m}$.Virgola fissa - formati n.m e normalizzazione →).
Il "diagramma circolare" aiuta: su 4 bit i codici valgono e i codici valgono ; sommare 1 a dà , cioè da si passa a .
Overflow
Quando il risultato di una operazione esce dall'intervallo rappresentabile c'è overflow aritmeticocondizione in cui il risultato di un'operazione non è rappresentabile con i bit disponibili. Sommando due numeri positivi si può ottenere un negativo e viceversa. Su 5 bit ():
- : dà (errato);
- (si scarta il riporto): dà (errato). Con segni opposti l'overflow non può mai verificarsi (il risultato è sempre compreso tra i due operandi).
Per la circolarità del complemento a 2, gli overflow intermedi si compensano: se il risultato finale è rappresentabile, è corretto anche se un passaggio intermedio è andato in overflow. Esempio su 8 bit (): . Il primo passo dà (overflow: esce dall'intervallo), il secondo (altro overflow, due negativi che diventano positivo): due volte il flag di overflow attivo, ma il risultato è corretto, come . Cambiando l'ordine, : e , nessun overflow. Il risultato finale è lo stesso, ma nel secondo caso il flag non si accende mai.
Un overflow non compensato rende i risultati totalmente inattendibili: tutti i processori lo rilevano con un bit del registro di statoregistro della CPU i cui bit (flag) segnalano overflow, zero, riporto e altre condizioni. Nei calcoli numerici va evitato o gestito (aritmetica saturatamodalità in cui un risultato fuori intervallo viene sostituito dal massimo o dal minimo rappresentabile, riscalatura: Architettura del repertorio di istruzioni - RISC, CISC, VLIW e indirizzamentoL'architettura è l'insieme delle risorse visibili al programmatore (istruzioni, modi di indirizzamento). RISC: poche istruzioni semplici, di uguale lunghezza, decodifica cablata, quasi tutte a 1 ciclo; CISC: molte istruzioni complesse, decodifica microprogrammata, più cicli. I DSP sono RISC "potenziati" (MAC, saturazione, barrel shifter, arrotondamento, VLIW, SIMD); i modi di indirizzamento tipici sono immediato, a registro, diretto, indiretto, con auto-incremento, circolare e a bit rovesciati (per la FFT).Architettura del repertorio di istruzioni - RISC, CISC, VLIW e indirizzamento →). La condizione logica di rilevamento è nella nota ALU - sommatore, overflow, carry look-ahead e shiftL'ALU è un insieme di celle a 1 bit (full adder + selettori) collegate in parallelo: somma, sottrae ($A-B=A+\overline B+1$: si inverte $B$ e si porta il riporto iniziale a 1), fa AND/OR. Il ritardo è dominato dal riporto: nel ripple-carry cresce linearmente con i bit; col carry look-aheadtecnica che calcola in anticipo i riporti da generazione e propagazione, riducendo il ritardo i riporti si calcolano da generazione $g_i=A_iB_i$ e propagazione $p_i=A_i+B_i$ in pochi livelli di logica. L'overflow è $V=C_{in,n-1}\oplus C_{out,n-1}$. Gli shift logici inseriscono 0, gli aritmetici estendono il segno; il barrel shiftercircuito che sposta una parola di un numero qualsiasi di posizioni in un solo ciclo sposta di $m$ posti in un ciclo.ALU - sommatore, overflow, carry look-ahead e shift →.
Errori comuni
- Dimenticare di sommare 1 dopo l'inversione dei bit.
- Pensare che in complemento a 2 l'intervallo sia simmetrico: non ha un opposto rappresentabile (su 8 bit esiste, no).
- Interpretare una stringa senza sapere se è un naturale, un intero con segno o una frazione.
- Credere che un overflow intermedio rovini sempre il risultato.
Versione ripasso
- Conversioni: intero decimale→binario con divisioni per 2 (resti dal basso), binario→decimale con Horner (), frazioni con moltiplicazioni per 2 (); esadecimale: 4 bit per cifra.
- Lunghezza di parola ≠ accuratezza (4 bit possono calcolare come 128, più lentamente).
- Complemento a 2: (dimostrazione: e ); intervallo , uno zero, , .
- Valore: ; o o (scala ): serve la normalizzazione (Virgola fissa - formati n.m e normalizzazioneIn virgola fissa il processore fa aritmetica sugli interi (con segno) e il fattore di scalacostante per cui si moltiplica un valore reale per ottenere l'intero memorizzato $2^{m}$ resta sottinteso: il formato n.m dice che dei bit disponibili $n$ sono la parte intera (compreso il segno se il numero è con segno, S; nessun segno se U) e $m$ la parte frazionaria. Il valore è $\text{codice}/2^m$. Passare dal formato n.m al decimale, o viceversa, è il calcolo più frequente dell'esame: su 16 bit $\text{valore}=\text{codice}/2^m$, l'intervallo è $[0,2^n)$ (U) oppure $[-2^{n-1},2^{n-1})$ (S), la risoluzione è $2^{-m}$.Virgola fissa - formati n.m e normalizzazione →).
- Overflow: risultato fuori intervallo; impossibile con segni opposti; gli intermedi si compensano ( su 8 bit: 2 flag; : 0 flag) (ALU - sommatore, overflow, carry look-ahead e shiftL'ALU è un insieme di celle a 1 bit (full adder + selettori) collegate in parallelo: somma, sottrae ($A-B=A+\overline B+1$: si inverte $B$ e si porta il riporto iniziale a 1), fa AND/OR. Il ritardo è dominato dal riporto: nel ripple-carry cresce linearmente con i bit; col carry look-aheadtecnica che calcola in anticipo i riporti da generazione e propagazione, riducendo il ritardo i riporti si calcolano da generazione $g_i=A_iB_i$ e propagazione $p_i=A_i+B_i$ in pochi livelli di logica. L'overflow è $V=C_{in,n-1}\oplus C_{out,n-1}$. Gli shift logici inseriscono 0, gli aritmetici estendono il segno; il barrel shiftercircuito che sposta una parola di un numero qualsiasi di posizioni in un solo ciclo sposta di $m$ posti in un ciclo.ALU - sommatore, overflow, carry look-ahead e shift →).
- Errori: dimenticare ; intervallo simmetrico; stringa senza formato.
Esercizi su questo argomento
- Esercizio 2 · da esadecimale a decimale con formato assegnato (temi d'esame febbraio 2023, gennaio 2025, gennaio 2021 e luglio 2020)
- Esercizio 4 · somme in complemento a 2, overflow e flag (temi d'esame gennaio 2023, luglio 2026 e esempi di prova)
- Esercizio 5 · algoritmo di Booth (temi d'esame gennaio 2021, gennaio 2022, gennaio 2023 e gennaio 2026)
- Esercizio 7 · virgola mobile a 16 bit, codifica, decodifica e somma (temi d'esame luglio 2020, febbraio 2025 e settembre 2026)
- Esercizio 24 · timer in modalità capture, misura di periodo e di duty-cycle (temi d'esame gennaio 2026 e dicembre 2020)