Codifica binaria dei numeri relativi
Introduzione All interno di un calcolatore, è possibile utilizzare solo 0 e 1 per codificare qualsiasi informazione. Nel caso dei numeri, non solo il modulo ma anche il segno deve essere espresso tramite 0 e 1. Il carattere - non esiste nella codifica binaria. Esistono diversi approcci alla codifica del segno, ma tutti basati sulla rappresentazione binaria dei numeri interi positivi e sull uso del bit più significativo come bit di segno.
Dalle combinazioni di bit ai numeri Avendo a disposizione n bit, si possono rappresentare 2 n diverse combinazioni (in questo caso, 2 n diversi valori numerici) Negli esempi della scorsa lezione, con 4 bit si rappresentavano 16 valori [0000 1111] cui si facevano corrispondere i numeri interi in base 10 [0..15]. In generale nei calcolatori il tipo numerico più corto usato utilizza 16 bit permettendo 65536 combinazioni. Non è strettamente necessario usare le combinazioni sul solo intervallo non negativo.
Esempio di assegnamento (teorico) 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15-8 -7-6 -5-4 -3-2 -1 0 1 2 3 4 5 6 7 Z
Modulo e segno Dati n bit su cui rappresentare il numero relativo: il primo bit (più significativo) è dedicato al segno, con la convenzione 0 = segno positivo, 1 = segno negativo i restanti (n-1) bit codificano il valore assoluto secondo le regole già viste Regola per rappresentare i numeri relativi: se ne calcola il valore assoluto e si rappresenta in base 2 disponendolo su (n-1) bit, poi si aggiunge come bit più significativo il bit di segno. Analogamente, per interpretare un numero negativo si valutano separatamente bit di segno e modulo.
Modulo e segno Intervallo di valori rappresentabili con n bit: [-(2 n-1 1) (2 n-1 1)] Rappresentazione dello zero è doppia: 0 000 e 1 000 Esempi 00001010 2 = [0] 0001010 2 = +10 10 10001010 2 = [1] 0001010 2 = -10 10
Complemento a 1 Dato il numero a > 0, il numero a si ottiene codificando a in base 2 e complementandone (ossia negandone) i bit. I numeri positivi devono avere come bit più significativo 0, che dunque diventa 1 nel caso di numeri negativi. Analogamente, per interpretare un numero in complemento a 1 si valuta dapprima il bit più significativo. Se questo è 0, il modulo è dato dalla sequenza stessa di bit, se invece è 1 il modulo è dato dalla negazione della sequenza di bit.
Complemento a 1 Intervallo di valori rappresentabili con n bit: [-(2 n-1 1) (2 n-1 1)] Rappresentazione dello zero è doppia: 0 000 e 1 111 Esempi 00001010 2 = +10 10 11110101 2 = -10 10
Complemento a 2 E il metodo più diffuso per la rappresentazione dei numeri negativi. La sua enorme diffusione è data dal fatto che i circuiti di addizione e sottrazione non devono esaminare il segno di un numero rappresentato con questo sistema per determinare quale delle due operazioni sia necessaria, permettendo tecnologie più semplici e maggiore precisione; si utilizza un solo circuito, il sommatore, sia per l'addizione che per la sottrazione.
Complemento a 2 Dato il numero a > 0, il numero a si ottiene codificando a in base 2, complementandone (ossia negandone) i bit e sommando 1. Metodo pratico per ottenere a da a in complemento a 2: leggere la stringa di bit da destra verso sinistra e mantenerla inalterata fino al primo 1 incontrato (compreso), e da lì in avanti complementare le restanti cifre. Lo stesso metodo può essere applicato per ottenere -a da a.
Complemento a 2 Intervallo di valori rappresentabili con n bit: [-2 n-1 (2 n-1 1)] Si elimina la ridondanza dello zero Esempi 00001010 2 = +10 10 11110110 2 = -10 10 Esempi di somme algebriche tra valori in complemento a 2.
Overflow In ogni calcolatore viene utilizzato un numero fissato di bit per rappresentare i numeri sia interi che reali. E' possibile, effettuando operazioni con numeri rappresentati da n bit, ottenere un numero non rappresentabile con n bit. Es.: somma algebrica, prodotto. Se il numero è troppo grande si parla di overflow. La condizione di overflow si ha quando il risultato di un calcolo intero è un numero che in binario occupa più bit di quelli a disposizione, di conseguenza ne viene troncata la parte più significativa generando un risultato errato.
Considerazioni In tutti i modi di rappresentare i numeri relativi visti precedentemente: il bit più significativo è il bit di segno; 0 denota segno positivo, 1 denota segno negativo; i numeri positivi hanno identica codifica e la loro costruzione o interpretazione non richiede la conoscenza del metodo di rappresentazione dei valori negativi; i numeri negativi non possono essere decodificati ed espressi in base 10 se non conoscendo il metodo di rappresentazione adottato.
Notazione in eccesso n Si considerano le combinazioni di bit crescenti, secondo la regola di alternanza di 0 e 1. Si assegna il valore 0 alla combinazione centrale (costituita da un 1 seguito da soli zeri) Es. con 8 bit: 0 10 = 10000000 2 I valori interi positivi crescenti sono messi in corrispondenza con quelli via via successivi, i valori interi negativi decrescenti (crescenti in modulo) con quelli via via precedenti.
Notazione in eccesso n Intervallo di valori rappresentabili con n bit: [-2 n-1 (2 n-1 1)] 00-2 01-1 10 0 11 1 Notazione in eccesso 2 (2 bit) 000-4 001-3 010-2 011-1 100 0 101 1 110 2 111 3 Notazione in eccesso 4 (3 bit)
Confronto sinottico dei metodi con 4 bit 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 m/s 0 1 2 3 4 5 6 7-0 -1-2 -3-4 -5-6 -7 c1 0 1 2 3 4 5 6 7-7 -6-5 -4-3 -2-1 -0 c2 0 1 2 3 4 5 6 7-8 -7-6 -5-4 -3-2 -1 ecc. -8-7 -6-5 -4-3 -2-1 0 1 2 3 4 5 6 7