Conversione dalla base 10 alla base 2 Rappresentazioni numeriche Sistemi posizionali, numeri binari, complemento a due Conversione dalla base 10 alla base 2  Esempio: il numero 610:  Dato un numero N la sua rappresentazione in base due sarà del tipo ck ck-1ck-2 … c1c0 (dove “ci” è una cifra binaria)  Per convertire un numero in base dieci nel corrispondente in base due si devono trovare i resti delle divisioni successive del numero N per due Conversione dalla base 10 alla base 2  Esempio: il numero 34510: 345/2 = 172 resto 1 172/2 = 86 resto 0 86/2 = 43 resto 0 43/2 = 21 resto 1 21/2 = 10 resto 1 10/2 = 5 resto 0 5/2 = 2 resto 1 2/2 = 1 resto 0 1/2 = 0 resto 1 6/2 = 3 resto 0 3/2 = 1 resto 1 1/2 = 0 resto 1  Leggendo i resti dal basso verso l’alto, si ha che la rappresentazione binaria del numero 610 è 1102  Leggendo i resti dal basso verso l’alto (in quanto si ottengono a partire dalla cifra meno significativa, l’unità), si ha che rappresentazione binaria del numero 34510 è 1010110012 Conversione dalla base 2 alla base 10  Sia cm cm-1cm-2 … c1c0 un numero rappresentato in base 2, usiamo: cm x 2m + cm-1 x 2m-1 + cm-2 x 2m-2 + … + c1 x 21 + c0 x 20 = N  Esempio: 1010110012 1 x 28 + 0 x 27 + 1 x 26 + 0 x 25 + 1 x 24 + 1 x 23 + 0 x 22 + 0 x 21 + 1 x 20 = 256 + 64 + 16 + 8 + 1 = 345 Altri basi: ottale, esadecimale  Sistema ottale  Utilizza una notazione posizionale basata su otto cifre (0,1,…,7) e sulle potenze di 8  Esempio: 1038 = 1 x 82 + 0 x 81 + 3 x 80 = 67  Sistema esadecimale  Utilizza una notazione posizionale basata su sedici cifre (0,1,…,9,A,B,C,D,E,F) e sulle potenze di 16   Esempio: 10316 = 1 x 162 + 0 x 161 + 3 x 160 = 259 Esempio: AC416 = 10 x 162 + 12 x 161 + 4 x 160 = 2756 1 Operazioni su numeri binari  Vediamo solo il caso della addizione nella codifica binaria: Operazioni su numeri binari  Addizione: 0 + 0 = 0 con riporto 0 0 + 1 = 1 con riporto 0 1 + 0 = 1 con riporto 0 1 + 1 = 0 con riporto 1  Si mettono in colonna i numeri da sommare  Si calcola il riporto ogni volta che la somma parziale supera il valore 1  Addizione: 0 + 0 = 0 con riporto 0 0 + 1 = 1 con riporto 0 1 + 0 = 1 con riporto 0 1 + 1 = 0 con riporto 1  Esempi: 1+ 1= 10 101+ 11= 1000 Codici a lunghezza fissa  Se si usa un numero prestabilito di cifre si ha un codice a lunghezza fissa  In questo modo si pone anche un limite al numero massimo rappresentabile  Esempio: qual è il numero più grande rappresentabile con 4 cifre?  In base 10:  In base 2:  In base 16:  In base 8: 9999 1111 FFFF 7777 (=1510) (=6553510) (=409510) il più grande numero (intero positivo) rappresentabile si può esprimere come bN – 1  Esempio: N=4  In base 10:  In base 2:  In base 16:  In base 8: 9999 1111 FFFF 7777 = 104 - 1 = 24 - 1 = 164 - 1 = 84 - 1 111+ 11= 1010 Codici a lunghezza fissa  Numeri maggiori di quello massimo rappresentabile causano problemi di overflow  Ovvero per essere rappresentati richiedono più cifre di quelle a disposizione  Esempio: 4 cifre  In base 10: 9999 + 1  In base 2: 1111 + 1  In base 16: FFFF + 1  In base 8: 7777 + 1 Codici a lunghezza fissa  In generale, con N cifre a disposizione e base b 10110101+ 1000110= 11111011 = 1000010 = 100002 (=1610) = 1000016 (=6553610) = 100008 (=409610) Codici a lunghezza fissa  Esempio di overflow nel sistema binario dovuto a operazioni aritmetiche:   5 + 4 = 9 (in sistema decimale) abbiamo usato solo un cifre decimale per il risulto  Ricordiamo: 510 = 1012 101+ 100= 1001 (in sistema binario) , 410 = 1002 Errore: overflow (non può essere codificato 910 = 10012 con tre bit) 2 Rappresentazione dei numeri  In realtà, una semplice codifica binaria come quella discussa fino ad ora non è sufficiente, per due motivi:  Numeri  Numeri negativi con la virgola Rappresentazione dei numeri negativi  Si può pensare di usare un bit per il segno  “0”  “1” identifica “+” identifica “-”  Gli altri bit vengono usati per codificare il valore assoluto (modulo) del numero  Per questi numeri vengono utilizzate delle rappresentazioni differenti  Per esempio “complemento a due” per rappresentare i numeri negativi Rappresentazione dei numeri negativi Rappresentazione dei numeri negativi  Con 3 bit avremo: " Problemi: 000 +0 001 +1 010 +2 011 +3 100 -0 101 -1 110 -2 111 -3   Il numero 0 ha due rappresentazioni Per l’operazione di somma si deve tener conto dei segni degli addendi 0010+ 1011= 1101 (+2) (-3) (-5 ERRATO)  Complemento a due:  Il bit più significativo rappresenta il segno del numero: 0 per i numeri positivi e 1 per i numeri negativi  La rappresentazione di un numero positivo si ottiene codificando il valore assoluto del numero con i bit restanti  La rappresentazione di un numero negativo si ottiene in tre passi:  Si rappresenta in complemento a due il numeri positivo con lo stesso valore assoluto del numero negativo da codificare  Si invertono tutti i bit in tale rappresentazione (0→1,1→0)  Si somma uno al risultato ottenuto al passo precedente Complemento a due  Esempio (con 4 bit a disposizione):  La codifica di +5 è 0101  La codifica del numero –5 avviene in tre passi:  La rappresentazione in complemento a due di +5 è 0101  Invertendo tutti i bit si ottiene 1010  Sommando 1 si ottiene 1011, la rappresentazione in complemento a due di -5 Complemento a due  Per ottenere un numero con segno data la sua rappresentazione in complemento a due:  Se il primo bit è 0 il numero è positivo: per calcolarne il valore assoluto si esegue la conversione da binario a decimale  Se il primo bit è 1 il numero è negativo:  Si ignora il primo bit invertono i restanti bit  Si converte il numero da binario a decimale  Si somma uno al numero ottenuto per ottenere il valore assoluto del numero negativo  Si 3 Complemento a due Esercizio  Esercizio: Rappresentare -3510 in complemento a 2  Esempio: 1011  Si esclude il primo bit 011 si ottiene 100 che è codifica di 4  Va aggiunto 1 per ottenere il valore assoluto 5  Il risultato è quindi -5  Invertendo 001000112 = +3510 Complemento a uno 11011100 + 1 = -----------11011101 Soluzione: -3510 = 110111012 Complemento a due Codifica dei numeri  Con 3 bit avremo: " Esempi di addizione: 000 +0 001 +1 010 +2 011 +3 100 -4 101 -3 110 -2 111 -1 0010+ 1011= 1101 (+2) (-5) (-3) 0111+ 1011= 0010 (+7) (-5) (+2)  Codificare il numero 13210 nella corrispondente rappresentazione binaria  Ordinare in modo crescente i seguente numeri: 10410 , 128 , 1000100002 , 1001110  Codificare il numero negativo –1210 nella rappresentazione in complemento a due Nel secondo esempio, l’overflow è ignorato Concludendo …  « There are only 10 types of people in the world: those who understand binary and those who don't »  « Ci sono solamente 10 tipi di persone nel mondo: chi comprende il sistema binario e chi no » 4