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 d n-1...d 1 d 0 con di {0,1} Il numero rappresentato? N = d n-1 2 n-1 +... + d 1 2 1 + d 0 2 0 00...0 = 0 00...1 = 1 00...10 = 2... 01...11 = 2 n-1-1 10...00 = 2 n-1... 11...11 = 2 n - 1 Con sequenze di n bit sono rappresentabili 2 n -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. 20 10 su 5 bit? SI 2. 64 10 su 6 bit? NO 3. 500 10 su 9 bit? SI 4. 1025 10 su 10 bit? NO 2 0 = 1 2 1 = 2 2 2 = 4 2 3 = 8 2 4 = 16 2 5 = 32 2 6 = 64 2 7 = 128 2 8 = 256 2 9 = 512 2 10 = 1024... Conversione binario - decimale Esercizio: 11101012 =???10 1 2 6 + 1 2 5 + 1 2 4 + 0 2 3 + 1 2 2 + 0 2 1 + 1 2 0 = 64 + 32 + 16 + 0 + 4 + 0 + 1 Soluzione: 11101012 = 11710
Conversione decimale - binario Esercizio: 10010 =???2 100 : 2 = 50 resto 0 50 : 2 = 25 resto 0 25 : 2 = 12 resto 1 12 : 2 = 6 resto 0 6 : 2 = 3 resto 0 3 : 2 = 1 resto 1 1 : 2 = 0 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 ==> 2 6 39-32 = 7 ==> 2 5 7-4 = 3 ==> 2 2 3-2 = 1 ==> 2 1 1-1 = 0 ==> 2 0 Allora 103 = 2 6 + 2 5 + 2 2 + 2 1 + 2 0 Soluzione: 10310 = 11001112 Ricorda che: 2 0 = 1 2 1 = 2 2 2 = 4 2 3 = 8 2 4 = 16 2 5 = 32 2 6 = 64 2 7 = 128 2 8 = 256 2 9 = 512 2 10 = 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 101 111 2 5 7 Soluzione: 101011112 = 2578 Esercizio: 6358 =???2 6 3 5 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 1011 1110 1101 B E D Soluzione: 1011111011012 = BED16 = 305310 Esercizio: A3C916 =???2 A 3 C 9 1010 0011 1100 1001 Ricorda che: 1 10 = 1 16 = 0001 2 2 10 = 2 16 = 0010 2... 9 10 = 9 16 = 1001 2 10 10 = A 16 = 1010 2 11 10 = B 16 = 1011 2 12 10 = C 16 = 1100 2 13 10 = D 16 = 1101 2 14 10 = E 16 = 1110 2 15 10 = F 16 = 1111 2 Soluzione: A3C916 = 10100011110010012 = 4192910
Conversioni di base Esercizio: Considerare il numero 715FBFFA 16 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 16 0 + 15 16 1 + 15 16 2 + 11 16 3 + 15 16 4 + + 5 16 5 + 1 16 6 + 7 16 7 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 2 n numeri unsigned (0...2 n -1) 0...00 = 0 0...01 = 1... 01...11 = 2 n-1-1 (massimo) 10...00 = 2 n-1 (minimo)... 11...11 = 2 n - 1 Dato N>0, il numero -N si rappresenta su n bit con il numero 2 n - N -1 ==> 2 n - 1 (1...1) -2 n-1 ==> 2 n - 2 n-1 = 2 n-1 (10...0)
Complemento a due: rappresentazione dei numeri negativi Esercizio: rappresentare -35 10 in complemento a due 00100011 2 = +35 10 11011100 + 1 = ------------ 11011101 Complemento a uno Soluzione: -35 10 = 11011101 2 Complemento a due: rappresentazione dei numeri negativi Esercizio: rappresentare -35 10 in complemento a due Algoritmo alternativo: invertire tutti i bit a sinistra del bit 1 meno significativo 00100011 2 = +35 10 11011101 2
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 1100 2 0000 0000 0000 0000 0000 0001 1111 0100 2 = 2 2 + 2 4 + 2 5 + 2 6 + 2 7 + 2 8 = 500 10 Soluzione: poichè il segno originale 1, cioè negativo, si ha 1111 1111 1111 1111 1111 1110 0000 1100 2 = -500 10 Complemento a due: somma e sottrazione Esercizio: eseguire 53 10-35 10 in complemento a due su 8 bit 11111101 53 10-53 10 + 00110101 2 + 35 10 = (-35) 10 = 11011101 2 = -------- ==> --------- ==> ------------ 18 10 18 10 (100010010 2 ) mod 2 8 00010010 2 = 18 10 ATTENZIONE: ricordare di effettuare l operazione di modulo
Complemento a due: somma e sottrazione Esercizio: eseguire 15 10-38 10 in complemento a due su 8 bit 00011110 15 10-15 10 + 00001111 2 + 38 10 = (-38) 10 = 11011010 2 = -------- ==> --------- ==> --------------------- - 23 10-23 10 (011101001 2 ) mod 2 8 11101001 2 00010111 2 = 23 10 Complemento a due: overflow In quali dei seguenti casi si può ottenere overflow: 1. somma di due numeri con segno concorde? SI 2. somma di due numeri con segno discorde? NO 3. sottrazione di due numeri con segno concorde? NO 4. sottrazione di due numeri con segno discorde? SI Regola per verificare la presenza di overflow: OVERFLOW ==> ultimi due riporti discordi NO OVERFLOW ==> ultimi due riporti concordi
Esercizio Considerate i numeri esadecimali x 1 = 7A, x 2 = 13, x 3 = FF, x 4 = C1, x 5 = 84 1. Scrivere i quattro numeri in codice binario a 8 bit x 1 = 0111 1010 x 2 = 0001 0011 x 3 = 1111 1111 x 4 = 1100 0001 x 5 = 1000 0100 2. Interpretare il codice binario in complemento a due ed eseguire le operazioni x 1 - x 2 ; x 3 + x 4 ; x 4 + x 5 ; x 4 - x 1 11111000 x 1 01111010 + -x 2 11101101 = ------------ (101100111) mod 2 8 = 01100111 overflow? Esercizio (continua) 11111111 x 3 11111111 + x 4 11000001 = ------------ (111000000) mod 2 8 = 11000000 overflow? 10000000 x 4 11000001 + x 5 10000100 = ------------ (101000101) mod 2 8 = 01000101 overflow? 10000000 x 4 11000001 + -x 1 10000110 = ------------ (101000111) mod 2 8 = 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 Il numero rappresentato? d n-1...d 1 d 0. d -1...d -m N = d n-1 B n-1 +... + d 1 B 1 + d 0 B 0 + 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.625 10 =??? 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.625 10 = 00010111.10100000 2
Rappresentazione dei numeri razionali in virgola mobile (floating point) Un numero reale R può essere scritto come R = ±m B e m = mantissa e = caratteristica B = base Esempi: B = 10 R 1 = 3.1569 x 10 3 R 2 = 2054.00035 x 10-6 R 3 = 0.1635 x 10 2 R 4 = 0.0091 x 10-12 " notazione scientifica: m = 0. d -1...d -k notazione scientifica normalizzata: m = d 0. d -1...d -k con d 0 0 Rappresentazione dei numeri razionali in virgola mobile (floating point) Rappresentando mantissa ed esponente in binario si ottengono numeri del tipo ±1. ss...s 2 yy...y Si osservi che: " Spostare la virgola a destra di n bit significa decrementare di n l esponente es: 0.01 2 11 = 1.0 2 1 Infatti 1 ¼ 2-2 2 3 = 1 2 1 " Spostare la virgola a sinistra di n bit significa incrementare di n l esponente es: 100.011 2 11 = 1.00011 2 101 Infatti (1 2 2 + 1 2-2 + 1 2-3 ) 2 3 = (1 2 0 + 1 2-4 + 1 2-5 ) 2 5 2 5 + 2 1 + 2 0 = 2 5 + 2 1 + 2 0
Rappresentazione dei numeri razionali in virgola mobile (floating point) Esercizio: 10 10 =??? 2 f.p. 10 10 = 1010 2 = 1010.0 2 2 0 = 1.01 2 3 Esercizio: 151.25 10 =??? 2 f.p. 151 10 = 128 + 16 + 4 + 2 + 1 = 10010111 2 0.25 10 x 2 = 0.50 10 parte intera 0 0.50 10 x 2 = 1 10 parte intera 1 0.25 10 = 0.01 2 Quindi = 151.25 10 = 10010111.01 2 = 1.001011101 2 2 7 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.0 10 2-38 2.0 10 2 38 " Standard IEEE754: Doppia precisione (64 bit) si riescono a rappresentare numeri 2.0 10 2-308 2.0 10 2 308 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? [2 10-1] 3. E... usando anche i piedi? [2 20-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? [-2 19...+(2 19-1)]