Esercitazioni su rappresentazione dei numeri e aritmetica dei
by user
Comments
Transcript
Esercitazioni su rappresentazione dei numeri e aritmetica dei
Esercitazioni su rappresentazione dei numeri e aritmetica dei calcolatori slide a cura di Salvatore Orlando & Marta Simeoni Architettura degli Elaboratori 1 Interi unsigned 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 di ∈ {0,1} Qual è il valore rappresentato ? N = dn-1• 2n-1 + .... + d1• 21 + d0• 20 Quanti e quali numeri sono rappresentabili su n bit? 00….00 = 0 00….01 = 1 00….10 … 01….11 10….00 … 11….11 100….00 = 2 = 2n-1- 1 = 2n-1 Con sequenze di n bit sono rappresentabili 2n numeri naturali (da 0 a 2n-1) = 2n - 1 = 2n Architettura degli Elaboratori 2 Interi unsigned in base 2 I seguenti numeri naturali sono rappresentabili usando il numero di bit specificato ? Ricorda che: 2010 su 5 bit ? 6410 su 6 bit ? 50010 su 9 bit ? 102510 su 10 bit ? SI NO SI NO 20 = 1 21 = 2 22 = 4 23 = 8 24 = 16 25 = 32 26 = 64 27 = 128 28 = 256 29 = 512 210 = 1024 .... Architettura degli Elaboratori 3 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 Architettura degli Elaboratori 4 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 Architettura degli Elaboratori 5 Conversione dec-bin: metodo più pratico Scriviamo direttamente il numero decimale come somma di potenze di 2. Per far questo, sottraiamo via via le potenze di 2, a partire dalle più significative. Ricorda che: Esercizio: 12310 = ???2 123 - 64 = 59 59 - 32 = 27 27 - 16 = 11 11 - 8 = 3 3 - 2=1 1 - 1=0 ==> ==> ==> ==> ==> ==> 26 25 24 23 21 20 Allora 12310 = 26 + 25 + 24 + 23 + 21 + 20 Soluzione: 12310 = 11110112 20 = 1 21 = 2 22 = 4 23 = 8 24 = 16 25 = 32 26 = 64 27 = 128 28 = 256 29 = 512 210 = 1024 .... Architettura degli Elaboratori 6 Conversione binario-ottale e viceversa Esercizio: 101011112 = ???8 10 101 111 Soluzione: 101011112 = 2578 2 5 7 Esercizio: 6358 = ???2 6 3 5 110 011 101 Soluzione: 6358 = 1100111018 Architettura degli Elaboratori 7 Base 16 Quali dei seguenti numeri esadecimali sono numeri sono corretti? BED CAR 938 DEAD BEBE A129 ACI DECADE BAG DAD 4H3 Architettura degli Elaboratori 8 Conversione binario-esadecimale e viceversa 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: 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 Soluzione: A3C916 = 10100011110010012 = 4192910 Architettura degli Elaboratori 9 Interi signed in complemento a 2 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 interi unsigned (da 0 a 2n-1) Sempre su n bit, quanti interi signed in complemento a 2 ? 0.......00 0.......01 ... 01......11 10......00 ... 11......11 = 0 =1 = 2n-1-1 (massimo pos.) = -2n-1 (minimo neg.) in totale sempre 2n numeri = -1 Architettura degli Elaboratori 10 Interi signed in complemento a 2 Dato N>0, il numero -N si rappresenta su n bit con il numero unsigned 2n - N -1 ⇒ 2n - 1 - 2n-1 ⇒ 2n - 2n-1 = 2n-1 (1........1) (10......0) Esempio su 5 bit: rappresentare N = -15 N = 25 – 15 = 32 -15 = 17 = 10001 Data la rappresentazione di un numero negativo in complemento a due su n bit, il valore corrispondente si determina assegnando - peso negativo al bit di segno (-2n-1) - peso positivo a tutti gli altri bit Esempio su 5 bit: 10011 = -24 + 21 + 20 = -13 Architettura degli Elaboratori 11 Complemento a 2: cambio di segno Esercizio: Rappresentare -3510 in complemento a 2 su 8 bit 001000112 = +3510 Complemento a uno 11011100 + 1 = -----------11011101 Soluzione: -3510 = 110111012 Architettura degli Elaboratori 12 Complemento a 2: cambio di segno Esercizio: Rappresentare -35 in complemento a 2 su 8 bit 001000112 = +3510 110111012 Inverti (complementa a 1) tutti i bit a sinistra del bit “1” meno significativo Architettura degli Elaboratori 13 Complemento a 2: cambio di segno 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: il numero è -50010 Architettura degli Elaboratori 14 Complemento a 2: somma e sottrazione Esercizio: eseguire 5310 - 3510 in complemento a due su 8 bit 3510 = 001000112 5310 3510 = _______ 1810 opposto: - 3510 = 110111012 5310 + (-35)10 = ⇒ _________ 1810 11111101 001101012 + 110111012 = ⇒________ (1000100102) mod 28 000100102 = 1810 Architettura degli Elaboratori 15 Complemento a 2: somma e sottrazione Esercizio: eseguire 1510 - 3810 in complemento a due su 8 bit 3810 = 001001102 1510 3810 = _______ -2310 opposto: - 3810 = 110110102 1510 + (-38)10 = ⇒ _________ -2310 00011110 000011112 + 110110102 = ⇒________ (0111010012) mod 28 000101112 = 2310 Architettura degli Elaboratori 16 Complemento a due: Overflow In quali dei seguenti casi si può ottenere overflow? – somma di due numeri con segno concorde? – somma di due numeri con segno discorde? – sottrazione di due numeri con segno concorde? – sottrazione di due numeri con segno discorde? SI NO NO SI Architettura degli Elaboratori 17 Complemento a due: come scoprire l’overflow Primo caso: somma algebrica di due numeri positivi A e B. Si ha overflow se A +B>=2n-1, ovvero se A+B non può essere rappresentata su n bit in complemento a due. Esempi: A=01111 B=00001 (OVERFLOW ⇒ due ultimi riporti discordi) A=01100 B=00001 (NON OVERFLOW ⇒ due ultimi riporti concordi) 01 01111+ 00001= 10000 00 01100+ 00001= 01101 Architettura degli Elaboratori 18 Complemento a due: come scoprire l’overflow Secondo caso: somma algebrica di due numeri negativi A e B. Si ha overflow se |A| +|B|>2n-1, ovvero se |A|+|B| non può essere rappresentata su n bit in complemento a due. Esempi: A=10100 B=10101 (OVERFLOW ⇒ due ultimi riporti discordi) A=10111 B=11101 (NON OVERFLOW ⇒ due ultimi riporti concordi) 10 10100+ 10101= 01001 11 10111+ 11101= 10100 Architettura degli Elaboratori 19 Esercizio Considerate i numeri esadecimali x1 = 7A x4 = C1 x2 = 13 x5 = 84 x3 = FF Scrivere i cinque numeri in codice binario a 8 bit x1 = 0111 1010 x2 = 0001 0011 x3 = 1111 1111 x4 = 1100 0001 x5 = 1000 0100 Interpretare il codice binario in complemento a due ed eseguire le operazioni x1- x2; x3 + x4; x4 + x5; 11111000 x1 01111010 + -x2 11101101 = _____________ (101100111) mod 28 = 01100111 x4 - x1 overflow? Architettura degli Elaboratori 20 Esercizio (continua) 11111111 x3 11111111 + x4 11000001 = ___________ (111000000) mod 28 = 11000000 overflow? 10000000 x4 11000001 + x5 10000100 = ___________ (101000101) mod 28 = 01000101 overflow? 10000000 x4 11000001 + -x1 10000110 = ___________ (101000111) mod 28 = 01000111 overflow? Architettura degli Elaboratori 21 Esercizio - caso particolare Si ricorda che l’opposto del numero negativo più piccolo su n bit non può essere rappresentato in complemento a due – codifica non simmetrica Supponiamo quindi: – di lavorare con rappresentazioni in complemento a due su 3 bit – di dover effettuare la sottrazione x-y dove y=1002 è il minimo numero rappresentabile (y=-410) Esercizio: calcolare x-y usando il solito algoritmo, dove x=0012 000 X 001 + -Y 100 ______ (0101) mod 23 = 101 Il complemento a due non ha effetto OVERFLOW, anche se riporti concordi !! Abbiamo infatti sottratto un numero negativo da un numero >= 0 ⇒ il segno atteso è positivo Architettura degli Elaboratori 22 Esercizio - caso particolare (continua) Esercizio: calcolare x-y, dove x=1112 – poiché x=1112 allora x = -110 – non dovremmo avere overflow, poiché vogliamo effettuare la somma algebrica di due numeri con segno discorde – il risultato da ottenere è x-y=-110- (-410) = 310 100 X 111 + -Y 100 ______ (1011) mod 23 = 011 = 310 Il complemento a due non ha effetto corretto NO OVERFLOW , anche se riporti discordi !! Abbiamo infatti sottratto un numero negativo da un numero negativo ⇒ in questo caso non si può verificare overflow Architettura degli Elaboratori 23 Procedura generale per determinare l’OVERFLOW Alla luce dell’esempio precedente, guardare solo ai due ultimi riporti per controllare l’OVERFLOW potrebbe quindi portare a risultati erronei Operazione Somma Somma Somma Somma Sottrazione Sottrazione Sottrazione Sottrazione Segno 1o operando Segno 2o operando Segno atteso + + + + - + + - + qualsiasi qualsiasi - + + qualsiasi + - - - qualsiasi Solo in questi casi si può verificare un OVERFLOW. Possiamo controllarlo confrontando il bit di segno del risultato con il segno atteso. Architettura degli Elaboratori 24 Numeri con la virgola (virgola fissa) Data una base B, si assegnano: n cifre per rappresentare la parte intera m cifre per rappresentare la parte frazionaria In base B=2, abbiamo quindi m+n bit per parte intera e frazionazia m n Esempio: dn-1...d1d0 . d-1...d-m Qual è il numero rappresentato in base B? N = dn-1• Bn-1 + .... + d1• B1 + d0• B0 + d-1• B-1 + ... + d-m• B-m Architettura degli Elaboratori 25 Virgola fissa Esercizio: 23.87510 = ???2 (usare la rappresentazione in virgola fissa con n=8, m=8) Conversione parte intera: Conversione parte frazionaria: 23 : 2 = 11 11 : 2 = 5 5:2 =2 2:2 =1 1:2 =0 0.875 x 2 = 1.75 0.75 x 2 = 1.50 0.50 x 2 = 1 resto 1 resto 1 resto 1 resto 0 resto 1 parte intera 1 parte intera 1 parte intera 1 Soluzione: 23.87510 = 00010111.111000002 Architettura degli Elaboratori 26 Numeri con virgola mobile Un numero reale R può essere scritto in base B come R = ± m • B e m = mantissa e = esponente B = base Esempi con 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= Notazione scientifica normalizzata: m = 0 . d-1...d-k d0 . d-1...d-k con d0 ≠ 0 Architettura degli Elaboratori 27 Numeri binari in virgola mobile Rappresentando mantissa ed esponente in binario in notazione scientifica normalizzata si ottengono numeri del tipo: ±1.xx…x • 2yy...y Si osservi che: Spostare la virgola (punto) a destra di n bit significa decrementare di n l’esponente es: 0.01 • 23 Infatti 1 • 2-2 • 23 = 1.0 • 21 = 1 • 21 Spostare la virgola (punto) a sinistra di n bit significa incrementare di n l’esponente es: 100.011 • 23 = 1.00011 • 25 Infatti (1• 22 + 1• 2-2 + 1• 2-3) • 23 = (1• 20 + 1• 2-4 + 1• 2-5) • 25 2 5 + 21 + 20 = 2 5 + 21 + 20 Architettura degli Elaboratori 28 Numeri FP Esercizio: 1010 = ???2 FP 1010 = 10102 = 1010.02 • 20 = 1.01 • 23 Esercizio: 151.2510 = ???2 FP 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 Architettura degli Elaboratori 29 Numeri FP Una volta fissato il numero di bit totali 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 (in valore assoluto) per poter essere rappresentato con il numero di bit assegnato all’esponente Architettura degli Elaboratori 30 Numeri FP in standard IEEE754 Standard IEEE754: Singola precisione (32 bit) L’intervallo di valori (decimali) rappresentabili è ± ~10-44.85 -- ~1038.53 Standard IEEE754: Doppia precisione (64 bit) L’intervallo di valori (decimali) rappresentabili è ± ~10-323.3 -- ~10308.3 Architettura degli Elaboratori 31 Standard IEEE754: Esempio Esempio: scrivere -10. 62510 in notazione floating point, usando lo standard IEEE754 in singola precisione - 10.62510 = - (10 + 0.5 +0.125) = - (23 + 21 + 1/2 + 1/8) = = - 1010. 1012 = - 1. 010101 • 23 = = (-1)1 • (1 + 0.010101) • 23 Aggiungendo all’esponente la polarizzazione il numero diventa: (-1)1 • (1 + 0.010101) • 2(3+127) Architettura degli Elaboratori 32 Standard IEEE754: Esempio Esempio: Quale numero decimale rappresenta la seguente sequenza di bit, letta secondo lo standard IEEE754? esponente: 100011012 = 128+8+4+1=14110 mantissa: 1+0.100112 = 1 + 0.5 + 0.0625 + 0.03125 = 1.5937510 Quindi il numero è: 1.5937510 • 2(141 - 127) = 1.5937510 • 214 oppure: 1,10011 * 214 = 110011000000000 = 16384+8192+1024+512 = 26112 Architettura degli Elaboratori 33 Somma di numeri FP Shift Somma Normalizzazione Arrotondamento Architettura degli Elaboratori 34 Somma di numeri FP con standard IEEE754 Esercizio: Dati i due numeri esadecimali A=C3160000 e B=42F80000 1. tradurre i numeri in binario 2. interpretare le sequenze di bit ottenute come numeri FP espressi secondo lo standard IEEE754 in singola precisione 3. eseguirne poi la somma specificando tutti i passaggi 4. rappresentare il risultato ottenuto in esadecimale Soluzione: 1. Traduzione in binario A = 1100 0011 0001 0110 0000 0000 0000 0000 B = 0100 0010 1111 1000 0000 0000 0000 0000 2. Interpretazione di A e B come numeri FP: A = 1 10000110 00101100000000000000000 B = 0 10000101 11110000000000000000000 cioè: A = (-1)1 • 1.001011 • 210000110 = (-1)1 • 1.001011 • 201111111 + 111 B = (-1)0 • 1.1111 • 210000101 = (-1)0 1.1111 201111111 + 110 Architettura degli Elaboratori 35 Somma di numeri FP con standard IEEE754 3. Somma § l’esponente di A è 27 mentre quello di B è 26. Allineando B si ottiene: A = 1.001011 B = 0.111110 § A è negativo e quindi eseguo il complemento a due aggiungendo un bit per il segno A = 10.110101 B = 00.111110 § somma delle mantisse A = 10.110101 + B = 00.111110 --------------------C = 11.110011 è un numero negativo il cui valore assoluto è 0.001101 • arrotondamento: non necessario Architettura degli Elaboratori 36 Somma di numeri FP con standard IEEE754 § normalizzazione C = (-1)1 • 0.001101 • 210000110 = (-1)1 • 1.101 • 201111111 + 100 e quindi C = 1 10000011 10100000000000000000000 = 1100 0001 1101 0000 0000 0000 0000 0000 4. Rappresentazione di C in esadecimale C = C1D00000 Architettura degli Elaboratori 37