Lezione 1 Rappresentazione dei numeri Aritmetica dei calcolatori Rappresentazione dei numeri naturali in base 2 Si utilizza un alfabeto binario A = {0,1} dove 0 corrisponde al numero zero e 1 corrisponde al numero uno dn-1...d1d0 con di ∈ {0,1} Il numero rappresentato ? N = dn-1• 2n-1 + .... + d1• 21 + d0• 20 00......0 00......1 00.....10 ... 01.....11 10.....00 ... 11.....11 =0 =1 =2 = 2n-1 -1 = 2n-1 = 2n - 1 Con sequenze di n bit sono rappresentabili 2n-1 numeri naturali Rappresentazione dei numeri naturali in base 2 Ricorda che: Domanda: Dire se i seguenti numeri naturali sono rappresentabili usando il numero di bit specificato 1. 2. 3. 4. 2010 su 5 bit ? SI 6410 su 6 bit ? NO 50010 su 9 bit ? SI 102510 su 10 bit ? NO 20 = 1 21 = 2 22 = 4 23 = 8 24 = 16 25 = 32 26 = 64 27 = 128 28 = 256 29 = 512 210 = 1024 .... Conversione binario - decimale Esercizio: 11101012 = ???10 1·26 + 1·25 + 1·24 + 0·23 + 1·22 + 0·21 + 1·20 = 64 + 32 + 16 + 0 + 4 + 0 + 1 Soluzione: 11101012 = 11710 Conversione decimale - binario Esercizio: 10010 = ???2 100 : 2 = 50 50 : 2 = 25 25 : 2 = 12 12 : 2 = 6 6:2=3 3:2=1 1:2=0 resto 0 resto 0 resto 1 resto 0 resto 0 resto 1 resto 1 Soluzione: 10010 = 11001002 Conversione decimale - binario: un procedimento più pratico Si scrive il numero decimale come somma di potenze di 2 Esercizio: 10310 = ???2 103 - 64 = 39 39 - 32 = 7 7-4=3 3-2=1 1-1=0 ==> ==> ==> ==> ==> 26 25 22 21 20 Allora 103 = 26 + 25 + 22 + 21 + 20 Soluzione: 10310 = 11001112 Ricorda che: 20 = 1 21 = 2 22 = 4 23 = 8 24 = 16 25 = 32 26 = 64 27 = 128 28 = 256 29 = 512 210 = 1024 .... Tre basi importanti : 2, 8, 16 Nel calcolatore i numeri sono rappresentati in base 2, ma sono importanti anche le basi 8 e 16. Infatti, la facilità di conversione binario-ottale binario-esadecimale consente di esprimere i numeri memorizzati nel calcolatore in forma più sintetica e comprensibile. Conversione binario - ottale Esercizio: 101011112 = ???8 10 2 101 111 5 7 3 5 Soluzione: 101011112 = 2578 Esercizio: 6358 = ???2 6 110 011 101 Soluzione: 6358 = 1100111012 La base 16 Quali dei seguenti sono numeri esadecimali validi? BED CAR 938 DEAD BEBE A129 ACI DECADE BAG DAD 4H3 Conversione binario - esadecimale Esercizio: 1011111011012 = ???16 Ricorda che: 1011 1110 B 1101 E D Soluzione: 1011111011012 = BED16 = 305310 Esercizio: A3C916 = ???2 A 3 C 1010 0011 1100 9 110 = 116 = 00012 210 = 216 = 00102 ...... 910 = 916 = 10012 1010 = A16 = 10102 1110 = B16 = 10112 1210 = C16 = 11002 1310 = D16 = 11012 1410 = E16 = 11102 1510 = F16 = 11112 1001 Soluzione: A3C916 = 10100011110010012 = 4192910 Conversioni di base Esercizio: Considerare il numero 715FBFFA16 1. Quale numero binario rappresenta? 7 1 5 F B F F A 0111 0001 0101 1111 1011 1111 1111 1010 2. Quale numero ottale rappresenta? 01 110 001 010 111 111 011 111 111 111 010 1 6 1 2 7 7 3 7 7 7 2 3. Quale numero decimale rappresenta? 10 • 160 + 15 • 161 + 15 • 162 + 11 • 163 + 15 • 164 + + 5 • 165 + 1 • 166 + 7 • 167 Rappresentazione dei numeri interi in complemento a due Come si riconosce un numero positivo da uno negativo? Positivo --> bit più significativo 0 Negativo --> bit più significativo 1 Su n bit sono rappresentabili 2n numeri unsigned (0...2n-1) 0.......00 = 0 0.......01 = 1 ... 01......11 = 2n-1-1 (massimo) 10......00 = 2n-1 (minimo) ... 11......11 = 2n - 1 Dato N>0, il numero -N si rappresenta su n bit con il numero 2n - N -1 ==> 2n - 1 (1........1) -2n-1 ==> 2n - 2n-1 = 2n-1 (10......0) Complemento a due: rappresentazione dei numeri negativi Esercizio: rappresentare -3510 in complemento a due 001000112 = +3510 Complemento a uno 11011100 + 1 = -----------11011101 Soluzione: -3510 = 110111012 Complemento a due: rappresentazione dei numeri negativi Esercizio: rappresentare -3510 in complemento a due Algoritmo alternativo: invertire tutti i bit a sinistra del bit “1” meno significativo 001000112 = +3510 110111012 Complemento a due: rappresentazione dei numeri negativi Esercizio: Quale numero decimale rappresenta il seguente numero binario in complemento a due? 1111 1111 1111 1111 1111 1110 0000 11002 0000 0000 0000 0000 0000 0001 1111 01002 = 22 + 24 + 25 + 26 + 27 + 28 = 50010 Soluzione: poichè il segno originale “1”, cioè negativo, si ha 1111 1111 1111 1111 1111 1110 0000 11002 = -50010 Complemento a due: somma e sottrazione Esercizio: eseguire 5310 - 3510 in complemento a due su 8 bit 5310 3510 = -------==> 1810 11111101 5310 + 001101012 + (-35)10 = 110111012 = --------==> -----------1810 (1000100102) mod 28 000100102= 1810 ATTENZIONE: ricordare di effettuare l’operazione di modulo Complemento a due: somma e sottrazione Esercizio: eseguire 1510 - 3810 in complemento a due su 8 bit 1510 3810 = -------==> - 2310 00011110 1510 + 000011112 + (-38)10 = 110110102 = --------==> --------------------- 2310 (0111010012) mod 28 111010012 000101112 = 2310 Complemento a due: overflow In quali dei seguenti casi si può ottenere overflow: 1. somma di due numeri con segno concorde? 2. somma di due numeri con segno discorde? 3. sottrazione di due numeri con segno concorde? 4. sottrazione di due numeri con segno discorde? SI NO NO SI Regola per verificare la presenza di overflow: OVERFLOW ==> ultimi due riporti discordi NO OVERFLOW ==> ultimi due riporti concordi Esercizio Considerate i numeri esadecimali x1 = 7A, x2 = 13, x3 = FF, x4 = C1, x5 = 84 1. Scrivere i quattro numeri in codice binario a 8 bit x1 = 0111 1010 x2 = 0001 0011 x3 = 1111 1111 x4 = 1100 0001 x5 = 1000 0100 2. Interpretare il codice binario in complemento a due ed eseguire le operazioni x1- x2 ; x3 + x4 ; x4 + x5 ; x4 - x1 11111000 01111010 + x1 11101101 = -x2 -----------(101100111) mod 28 = 01100111 overflow? Esercizio (continua) 11111111 11111111 + x3 11000001 = x4 -----------(111000000) mod 28 = 11000000 overflow? 10000000 11000001 + x4 10000100 = x5 -----------(101000101) mod 28 = 01000101 overflow? 10000000 11000001 + x4 10000110 = -x1 -----------(101000111) mod 28 = 01000111 overflow? Rappresentazione dei numeri razionali in virgola fissa Data una base B, si assegnano: " n cifre per rappresentare la parte intera " m cifre per rappresentare la parte frazionaria dn-1...d1d0 . d-1...d-m Il numero rappresentato ? N = dn-1• Bn-1 + .... + d1• B1 + d0• B0 + d-1• B-1 + ... + d-m• B-m Per B=2 la rappresentazione dei numeri razionali in virgola fissa prevede l’uso di n+m bit n m Rappresentazione dei numeri razionali in virgola fissa Esercizio: 23.62510 = ???2 (usare la rappresentazione in virgola fissa con n=8, m=8) Conversione della parte intera: 23 : 2 = 11 resto 1 11 : 2 = 5 resto 1 5:2 =2 resto 1 2:2 =1 resto 0 1:2 =0 resto 1 " Coversione della parte frazionaria: 0.625 x 2 = 1.25 parte intera 1 0.25 x 2 = 0.50 parte intera 0 0.50 x 2 = 1 parte intera 1 " Soluzione: 23.62510 = 00010111.101000002 Rappresentazione dei numeri razionali in virgola mobile (floating point) Un numero reale R può essere scritto come R = ±m•Be m = mantissa e = caratteristica B = base Esempi: B = 10 R1 = 3.1569 x 103 R2 = 2054.00035 x 10-6 R3 = 0.1635 x 102 R4 = 0.0091 x 10-12 " notazione scientifica: m = 0 . d-1...d-k notazione scientifica normalizzata: m = d0 . d-1...d-k con d0 ≠ 0 Rappresentazione dei numeri razionali in virgola mobile (floating point) Rappresentando mantissa ed esponente in binario si ottengono numeri del tipo ±1. ss....s • 2yy...y Si osservi che: " Spostare la virgola a destra di n bit significa decrementare di n l’esponente es: 0.01 • 211 = 1.0 • 21 Infatti 1 ¼• 2-2 • 23 = 1 • 21 " Spostare la virgola a sinistra di n bit significa incrementare di n l’esponente es: 100.011 • 211 = 1.00011 • 2101 Infatti (1• 22 + 1• 2-2 + 1• 2-3) • 23 = (1• 20 + 1• 2-4 + 1• 2-5) • 25 25 + 21 + 20 = 25 + 21 + 20 Rappresentazione dei numeri razionali in virgola mobile (floating point) Esercizio: 1010 = ???2 f.p. 1010 = 10102 = 1010.02 • 20 = 1.01 • 23 Esercizio: 151.2510 = ???2 f.p. 15110 = 128 + 16 + 4 + 2 + 1 = 100101112 0.2510 x 2 = 0.5010 parte intera 0 0.5010 x 2 = 110 parte intera 1 0.2510 = 0.012 Quindi = 151.2510 = 10010111.012 = 1.0010111012 • 27 Rappresentazione dei numeri razionali in virgola mobile (floating point) Una volta fissato il numero di bit totale per la rappresentazione dei numeri razionali rimane da decidere quanti bit assegnare per la mantissa ? (maggiore ? il numero di bit e maggiore ? l’accuratezza con cui si riescono a rappresentare i numeri) " quanti bit assegnare per l’esponente ? (aumentando i bit si aumenta l’intervallo dei numeri rappresentabili) " OVERFLOW: si ha quando l’esponente positivo ? troppo grande per poter essere rappresentato con il numero di bit assegnato all’esponente UNDERFLOW: si ha quando l’esponente negativo ? troppo grande per poter essere rappresentato con il numero di bit assegnato all’esponente Rappresentazione dei numeri razionali in virgola mobile (floating point) " Standard IEEE754: Singola precisione (32 bit) si riescono a rappresentare numeri 2.010 • 2-38 ÷ 2.010 • 238 " Standard IEEE754: Doppia precisione (64 bit) si riescono a rappresentare numeri 2.010 • 2-308 ÷ 2.010 • 2308 Esercizio Supponiamo di contare in binario usando le dita delle mani: Dito esteso = 1 Dito chiuso = 0 Consideriamo il pollice come bit meno significativo e il mignolo come bit più significativo. 1. Come si rappresentano i numeri 6, 17, 31? 2. Fino a che numero si riesce a contare usando entrambe le mani? [210 -1] 3. E ... usando anche i piedi? [220 -1] 4. Considerate il mignolo del piede sinistro come bit di segno della rappresentazione in complemento a due. Quale range di numeri si riesce a rappresentare? [-219....+(219-1)]