Codifica dell'informazione 55 Lo standard IEEE prevede cinque cause di eccezione aritmetica: underflow, overflow, divisione per zero, eccezione per inesattezza, e eccezione di invalidità. Le eccezioni di underflow, overflow, e divisione per zero, sono presenti anche in altri standard, mentre l eccezione per inesattezza è caratteristica dello standard IEEE e si verifica sia quando il risultato di un operazione deve essere arrotondato, sia quando l operazione incorre in un overflow. 2.12 Esercizi risolti 1) Convertire i numeri decimali 335 e 564 in base 2, in base 8 e in base 16 mostrando il risultato e tutti i passaggi svolti. Si consideri 335. Per la conversione in base 2 si ha: 335/2 = N 0 = 167 R 0 = 1 N 0 /2 = N 1 = 83 R 1 = 1 N 1 /2 = N 2 = 41 R 2 = 1 N 2 /2 = N 3 = 20 R 3 = 1 N 3 /2 = N 4 = 10 R 4 = 0 N 4 /2 = N 5 = 5 R 5 = 0 N 5 /2 = N 6 = 2 R 6 = 1 N 6 /2 = N 7 = 1 R 7 = 0 N 7 /2 = N 8 = 0 R 8 = 1 Pertanto risulta: (335) 10 = (101001111) 2. Per la conversione in base 8 si ha: 335/8 = N 0 = 41 R 0 = 7 N 0 /8 = N 1 = 5 R 1 = 1 N 1 /8 = N 2 = 0 R 2 = 5 Il risultato è: (335) 10 = (517) 8. Per la conversione in base 16: 335/16 = N 0 = 20 R 0 = 15 N 0 /16 = N 1 = 1 R 1 = 4 N 1 /16 = N 2 = 0 R 2 = 1 Il risultato è: (335) 10 = (14F) 16 Si consideri ora 564. Per la conversione in base 2 si ha:
56 Capitolo 2 564/2 = N 0 = 282 R 0 = 0 N 0 /2 = N 1 = 141 R 1 = 0 N 1 /2 = N 2 = 70 R 2 = 1 N 2 /2 = N 3 = 35 R 3 = 0 N 3 /2 = N 4 = 17 R 4 = 1 N 4 /2 = N 5 = 8 R 5 = 1 N 5 /2 = N 6 = 4 R 6 = 0 N 6 /2 = N 7 = 2 R 7 = 0 N 7 /2 = N 8 = 1 R 8 = 0 N 8 /2 = N 9 = 0 R 9 =1 Pertanto risulta: (564) 10 = (1000110100) 2. Conversione in base 8: 564/8 = N 0 = 70 R 0 = 4 N 0 /8 = N 1 = 8 R 1 = 6 N 1 /8 = N 2 = 1 R 2 = 0 N 2 /8 = N 3 = 0 R 3 = 1 Il risultato è: (564) 10 = (1064) 8. Conversione in base 16: Il risultato è: (564) 10 = (234) 16 564/16 = N 0 = 35 R 0 = 4 N 0 /16 = N 1 = 2 R 1 = 3 N 1 /16 = N 2 = 0 R 2 = 2 2) Sia dato il numero decimale frazionario 465,375. Convertirlo in base 2 usando la notazione in virgola fissa, mostrando il risultato e tutti i passaggi svolti. Si effettui la conversione in base 2 della parte intera:
Codifica dell'informazione 57 465/2 = N 0 = 232 R 0 = 1 N 0 /2 = N 1 = 116 R 1 = 0 N 1 /2 = N 2 = 58 R 2 = 0 N 2 /2 = N 3 = 29 R 3 = 0 N 3 /2 = N 4 = 14 R 4 = 1 N 4 /2 = N 5 = 7 R 5 = 0 N 5 /2 = N 6 = 3 R 6 = 1 N 6 /2 = N 7 = 1 R 7 = 1 N 7 /2 = N 8 = 0 R 8 =1 Per la parte intera risulta: (465) 10 = (111010001) 2 Si effettui la conversione in base 2 della parte frazionaria: Prodotti Parti intere 0,375*2 = 0,75 b -1 = 0 0,75*2 = 1,5 b -2 = 1 0,5*2 = 1 b -3 = 1 Per la parte frazionaria risulta: (0,375) 10 = (0,011) 2 Il risultato finale è: (465,375) 10 = (111010001,011) 2 3) Sia dato il numero binario frazionario N 2 = 101110000,101. Convertirlo in base 8, in base 16 e in base 10 mostrando i risultati e tutti i passaggi svolti. La conversione in base 8 si ottiene, per la parte intera, partendo dal bit più a destra e suddividendo il numero binario in gruppi di tre bit (aggiungendo a sinistra, se necessario, degli zeri) e, per la parte frazionaria, partendo dal bit più a sinistra e suddividendo il numero binario in gruppi di tre bit (aggiungendo a destra, se necessario, degli zeri): N 2 = 101 110 000,101.Quindi per ogni gruppo di tre bit si sostituisce la corrispondente cifra ottale: N 8 = 560,5 Analogamente per la conversione in base 16 si opera su gruppi di quattro bit: N 2 =1 0111 0000, 1010 ottenendo: N 16 = 170,A La conversione in base 10 si può ricavare a partire dalla rappresentazione binaria: N 10 = 1 * 2 8 + 0 * 2 7 + 1 * 2 6 + 1 * 2 5 + 1 * 2 4 + 0 * 2 3 + 0 * 2 2 + 0 * 2 1 + 0 * 2 0 + 1 * 2-1 + 0 * 2-2 + 1 * 2-3 = 368,625 Oppure si può ricavare dalle rappresentazioni ottali o esadecimali: N 10 = 5 * 8 2 + 6 * 8 1 + 0 * 8 0 + 5 * 8-1 = 368,625 N 10 = 1 * 16 2 + 7 * 16 1 + 0 * 16 0 + 10 * 16-1 = 368,625 4) Siano date le seguenti coppie (a, b) di numeri interi con segno espressi nella rappresentazione decimale: (78, 26); ( 20, 14); ( 12, 24); (78, 82). Calcolare il risultato delle operazioni (a + b) e (a b) in aritmetica binaria tra numeri interi
58 Capitolo 2 con segno rappresentati in complemento a due su 8 bit. Indicare la presenza di un eventuale overflow. a = (78) 10 b = (26) 10 R 0 0 0 1 1 1 1 0 a 0 1 0 0 1 1 1 0 + (78) 10 + b 0 0 0 1 1 0 1 0 (26) 10 a+b 0 1 1 0 1 0 0 0 (104) 10 R 1 1 0 0 1 1 1 0 a 0 1 0 0 1 1 1 0 + (78) 10 + b 1 1 1 0 0 1 1 0 ( 26) 10 a b 0 0 1 1 0 1 0 0 (52) 10 a = (-20) 10 b = (14) 10 R 0 0 0 0 1 1 0 0 a 1 1 1 0 1 1 0 0 + ( 20) 10 + b 0 0 0 0 1 1 1 0 (14) 10 a+b 1 1 1 1 1 0 1 0 ( 6) 10 a 1 1 1 0 1 1 0 0 + ( 20) 10 + b 1 1 1 1 0 0 1 0 ( 14) 10 a b 1 1 0 1 1 1 1 0 ( 34) 10 a = ( 12) 10 b = ( 24) 10 a 1 1 1 1 0 1 0 0 + ( 12) 10 + b 1 1 1 0 1 0 0 0 ( 24) 10 a+b 1 1 0 1 1 1 0 0 ( 36) 10 R 1 1 1 1 0 0 0 0 a 1 1 1 1 0 1 0 0 + ( 12) 10 + b 0 0 0 1 1 0 0 0 (24) 10 a b 0 0 0 0 1 1 0 0 (12) 10 a = (78) 10 b = ( 82) 10 R 0 0 0 0 1 1 1 0 a 0 1 0 0 1 1 1 0 + (78) 10 + b 1 0 1 0 1 1 1 0 ( 82) 10 a+b 1 1 1 1 1 1 0 0 ( 4) 10
Codifica dell'informazione 59 R 0 1 0 1 1 1 1 0 a 0 1 0 0 1 1 1 0 + (78) 10 + b 0 1 0 1 0 0 1 0 (82) 10 a b 1 0 1 0 0 0 0 0 overflow 5) Si considerino i numeri interi con segno rappresentati in complemento a due su 8 bit. Si scriva la codifica binaria del numero positivo più grande rappresentabile e del numero negativo più piccolo rappresentabile. Si calcoli il risultato della somma binaria dei due numeri trovati (indicando il risultato anche in decimale). Il numero positivo più grande rappresentabile è: (01111111) 2 = (127) 10 cioè (2 7 1). Il numero negativo più piccolo rappresentabile è: (10000000) 2 = ( 128) 10 cioè ( 2 7 ) Si calcoli ora la somma (01111111 + 10000000): R 0 0 0 0 0 0 0 0 a 0 1 1 1 1 1 1 1 + (127) 10 + b 1 0 0 0 0 0 0 0 ( 128) 10 a+b 1 1 1 1 1 1 1 1 ( 1) 10 6) Calcolare il risultato delle seguenti operazioni binarie tra numeri interi con segno rappresentati in complemento a due su 8 bit (indicando la presenza di un eventuale overflow): (00001101 + 00111101); (00001100 + 10110110); (00010100 01101111); (11110100 + 11101000); (00000001 + 11111110). Scrivere l equivalente rappresentazione dei numeri e del risultato anche in decimale. (00001101 + 00111101): R 0 0 1 1 1 1 0 1 a 0 0 0 0 1 1 0 1 + (13) 10 + b 0 0 1 1 1 1 0 1 (61) 10 a+b 0 1 0 0 1 0 1 0 (74) 10
60 Capitolo 2 (00001100 + 10110110): R 0 0 1 1 1 1 0 0 a 0 0 0 0 1 1 0 0 + (12) 10 + b 1 0 1 1 0 1 1 0 ( 74) 10 a+b 1 1 0 0 0 0 1 0 ( 62) 10 (00010100 01101111): R 0 0 0 1 0 0 0 0 a 0 0 0 1 0 1 0 0 + (20) 10 + b 1 0 0 1 0 0 0 1 ( 111) 10 a+b 1 0 1 0 0 1 0 1 ( 91) 10 (11110100 + 11101000): a 1 1 1 1 0 1 0 0 + ( 12) 10 + b 1 1 1 0 1 0 0 0 ( 24) 10 a+b 1 1 0 1 1 1 0 0 ( 36) 10 (00000001 + 11111110): R 0 0 0 0 0 0 0 0 a 0 0 0 0 0 0 0 1 + (1) 10 + b 1 1 1 1 1 1 1 0 ( 2) 10 a+b 1 1 1 1 1 1 1 1 ( 1) 10 7) Siano date le seguenti coppie (a, b) di numeri binari su 8 bit: (11110101, 11101010) e (11001010, 01001100). Calcolare i risultati della somma (a + b) considerando gli operandi codificati rispettivamente come: - numeri interi positivi; - numeri interi con segno rappresentati in modulo e segno; - numeri interi con segno rappresentati in complemento a 1; - numeri interi con segno rappresentati in complemento a 2. Indicare la presenza di un eventuale overflow. (11110101, 11101010): Considerando gli operandi numeri interi positivi rappresentati con 8 bit:
Codifica dell'informazione 61 a 1 1 1 1 0 1 0 1 + (245) 10 + b 1 1 1 0 1 0 1 0 (234) 10 a+b 1 1 0 1 1 1 1 1 overflow Considerando gli operandi numeri interi con segno rappresentati in modulo e segno con 8 bit, gli operandi risultano entrambi negativi ( 117, 106) 10. Si effettui la somma dei valori assoluti (rappresentati con 7 bit) degli operandi: R 1 1 0 0 0 0 0 a 1 1 1 0 1 0 1 + (117) 10 + b 1 1 0 1 0 1 0 (106) 10 a + b 1 0 1 1 1 1 1 overflow Considerando gli operandi numeri interi con segno rappresentati in complemento a 1 con 8 bit, gli operandi risultano entrambi negativi ( 10, 21) 10. a 1 1 1 1 0 1 0 1 + ( 10) 10 + b 1 1 1 0 1 0 1 0 ( 21) 10 1 1 0 1 1 1 1 1 Sommando al risultato così ottenuto il riporto in uscita dal bit più significativo si ottiene il risultato finale: 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 + 0 0 0 0 0 0 0 1 a+b 1 1 1 0 0 0 0 0 ( 31) 10 Considerando gli operandi numeri interi con segno rappresentati in complemento a 2 con 8 bit: a 1 1 1 1 0 1 0 1 + ( 11) 10 + b 1 1 1 0 1 0 1 0 ( 22) 10 a+b 1 1 0 1 1 1 1 1 ( 33) 10 (11001010, 01001100): Considerando gli operandi numeri interi positivi rappresentati con 8 bit: R 1 1 0 0 1 0 0 0 a 1 1 0 0 1 0 1 0 + (202) 10 + b 0 1 0 0 1 1 0 0 (76) 10 a+b 0 0 0 1 0 1 1 0 overflow Considerando gli operandi numeri interi con segno rappresentati in modulo e segno con 8 bit, gli operandi risultano ( 74, +76) 10. Essendo gli operandi di segno discorde, occorre confrontare i valori assoluti (rappresentati con 7 bit) ed effettuare la sottrazione binaria tra il minuendo (76) 10 e il sottraendo (74) 10 tenendo conto dei prestiti:
62 Capitolo 2 P 0 0 0 0 0 1 0 a 1 0 0 1 1 0 0 (76) 10 b 1 0 0 1 0 1 0 (74) 10 a b 0 0 0 0 0 1 0 (2) 10 Premettendo il segno positivo al risultato si ottiene: 00000010 Considerando gli operandi numeri interi con segno rappresentati in complemento a 1 con 8 bit: R 1 1 0 0 1 0 0 0 a 1 1 0 0 1 0 1 0 + ( 53) 10 + b 0 1 0 0 1 1 0 0 (+76) 10 0 0 0 1 0 1 1 0 Sommando al risultato così ottenuto il riporto in uscita dal bit più significativo si ottiene il risultato finale: 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 + 0 0 0 0 0 0 0 1 a+b 0 0 0 1 0 1 1 1 (23) 10 Considerando gli operandi numeri interi con segno rappresentati in complemento a 2 con 8 bit: R 1 1 0 0 1 0 0 0 a 1 1 0 0 1 0 1 0 + ( 54) 10 + b 0 1 0 0 1 1 0 0 (76) 10 a+b 0 0 0 1 0 1 1 0 (22) 10 2.13 Esercizi proposti 1) Eseguire le seguenti conversioni di base: (523,1) 10 base 2 (523,1) 10 base 8 (101,11) 2 base 8 (101,11) 2 base 10 2) Dato che (79) 10 = (142) b, determinare il valore della base b. 3) Scrivere le tabelle relative ai seguenti codici decimali pesati: (7,4,2, 1) (4, 4, 1, 2) (8, 7, 4, 2) (7, 3, 1, 2) (8, 4, -3, 2) 4) Eseguire le seguenti sottrazioni usando l aritmetica in complemento a 2: (111000) (110011)
Codifica dell'informazione 63 (11001100) (101110) (111100001111) (110011110011) (11000011) (11101000) 5) Dimostrare che la moltiplicazione di due numeri binari di n-bit in base b genera un prodotto su non più di 2n-bit. 6) Calcolare quozienti e resti delle seguenti divisioni, mostrando tutti i passi dell algoritmo di calcolo usato: (1101) / (0001) (1101) / (0010) (1101) / (0011) (1101) / (1100) 7) Assumendo che l esponente e sia nell intervallo 0 e X, con un bias pari a 9, che la base sia b, e che a mantissa sia composta da p-bit, determinare il più piccolo e il grande valore positivo esprimibile come numero in virgola mobile normalizzato. 8) Esprimere i seguenti numeri nel formato IEEE 754-1985 su 32-bit: ( 5) ( 6) ( 1,755) (484) (1 / 32) ( 1 / 32)