Esercitazione 2 Soluzione es 3-4-5 Autore: Luca Marengo – Informatica - Mondovì 3) Convertire i seguenti numeri dalla base 10 nelle rappresentazioni in complemento a due e in modulo e segno su 10 bit. Indicare inoltre, in ciascun caso, qual è il numero minimo di bit necessari per una corretta rappresentazione. a) 312 b) -512 c) 86 d) -232 e) 512 soluzione: a) per convertire un numero in base 10 in un numero a base x, si applica il metodo di divisioni successive del numero in base 10 e la base ricercata. Le cifre di resto ottenute vanno scritte in ordine da destra a sinistra, ottenendo così il numero nella base richiesta. In questo caso: 312 2 2 156 2 11 14 78 2 10 16 6 39 2 12 16 18 2 19 2 12 0 18 19 18 9 2 0 0 18 1 8 4 2 1 1 4 2 2 0 2 1 2 0 0 0 1 Il numero così ottenuto è: 100111000 Controprova: (1*2+0)*2+0)*2+1)*2+1)*2+1)*2+0)+2+0)*2+0) = 312 Per la rappresentazione dei numeri con segno, nella rappresentazione in modulo e segno, si rappresenta il modulo su 9 bit e, nel decimo bit, si pone 0 per segno positivo, 1 per segno negativo. Nella rappresentazione in complemento a 2, i numeri positivi sono rappresentati con il loro modulo e hanno 0 nel bit del segno. I numeri negativi si rappresentano con il complemento a 2 del corrispondente positivo. Pertanto, +312 si scrive su 10 bit come 0100111000 si per il modulo e segno sia per il complemento a 2. quindi con metodo identico si può ricavare che: b) -51210 Per i modulo: 51210 = 10000000002 Il modulo richiede 10 bit. In modulo e segno il numero -512 non si può rappresentare, richiedendo 11 bit. In complemento a 2 invece è rappresentabile: questo valore è il minimo rappresentabile su 10 bit. Le cifre rappresentabili sono infatti 210-1, per un totale di 1024 cifre. Vanno da -512 a +511 c) +8610=00010101102 sia per modulo e segno che per complemento a 2, d)-23210=101101010002 23210=0111010002 In modulo e segno: 1011101000. In complemento a 2, il valore in modulo si ottiene facendo il complemento a 2 del numero: operativamente, da destra a sinistra, si mantengono uguali le cifre fino al primo 1 che si incontra. Questo si lascia inalterato, le cifre successive si invertono, ovvero si segna 0 dove c'è un 1 e viceversa. In questo caso, ottenuto il numero in modulo 0011101000 si effettua il complemento a 2 per trovare il valore negativo, ottenendo così 1100011000 e) +512 non è rappresentabile su 10 bit. Ne occorrerebbero, per esplicitare il segno, 11. Così si avrebbe 01000000000 4) Dati i seguenti numeri in base 10, convertirli nella rappresentazione in complemento a due sul minor numero di cifre binarie con una precisione almeno uguale a 1/50. Effettuare quindi l'operazione descritta, indicando quando il risultato è da ritenersi corretto, utilizzando lo stesso numero di bit necessario per la rappresentazione. a) + 123 + 12093 b) 0.30003 - 0.0111 c) 0.344 + 134.566 d) + 13.653 - 212.742 e) 47.123 – 31.341 a) Usando il metodo di conversione adottato nell'esercizio 3), si ottiene: 12310=011110112 1209310=0101111001111012 eseguendo la somma: 010111100111101 + 12093+ 000000001111011 = 123= 010111110111000 +12216 b) I numeri frazionari hanno un diverso procedimento di conversione: per prima cosa si tenga conto della precisione ricercata. In questo caso, la precisione richiesta è di 1/50. sapendo che per ogni bit la precisione aumenta di ½, si ha: 1 bit= ½ 2 bit= ¼ 3 bit= 1/8 4 bit=1/16 5 bit=1/32 6 bit=1/64 … quindi, siccome 32<50<64, si useranno 6 bit dopo il punto decimale. Poi si moltiplica il numero in base 10 per la base richiesta, in questo caso 2. Si riporta la cifra intera ottenuta a destra del punto decimale. La si elimina, e si ripete il processo esempio: 0.30003 *2= 0.60006 0 0.60006*2=1.20012 1 0.20012*2=0.40024 0 0.40024*2=0.80048 0 0.80048*2=1.60096 1 0.60096*2=1.20192 1 Il numero è, pertanto, 0.010011 con lo stesso processo il numero 0.0111 diventa in base due: 0.000000 con precisione di 1/64 l'operazione diventa 00.010011 – 00.000000=0.010011 il grado di precisione scelto è troppo basso perché avvengano significativi cambiamenti. c) applicando i metodi sopra descritti, si i valori assunti in base 2 sono rispettivamente: 00.010110 e 010000110.100100 000000000.010110+ 0.344+ 010000110.111010= 134.566= 010000110.111010 134.910 d) il valore di 13.653 è 01101.101001, quello di -212.742 è, dopo il complemento a 2 sul modulo, 10010101011.010001. Sommando al primo il complemento a 2 del secondo: 000001101.101001+ 13.653100101011,010001= 212.742= 100111000.111010 -199.089 e) il valore di 47.123 è 0101111.000111, quello di -31.341, dopo c a 2 sul modulo, è 100000.101011. La somma è: 0101111.000111+ 47.1231100000.101011= 31.341= 10001111.110010 15.782 Gli ultimi due carry sono uguali quindi non c’è overflow e l’ultimo bit viene scaricato, il risultato è esatto. 5) Considerando i seguenti numeri come rappresentazioni prima in complemento a 2 e poi in modulo e segno, se ne trovi il valore: a) CDAB b) 3412 c) 7B56 d) A798 soluzione: a) Tutti i numeri sono in binario codificato in esadecimale. Quindi, basta convertire ogni cifra esadecimale in binario. In questo caso: Base 16 Base 10 Base 2 C = 12 = 1100 D = 13 = 1101 A = 10 = 1010 B = 11 = 1011 il numero così ottenuto è 1100 1101 1010 1011. In modulo e segno: segno: modulo: 100 1101 1010 1011 valore rappresentato: -19883 In complemento a 2 Segno: Modulo: 0011 0010 0101 01012 Valore rappresentato: -1288510 b) il numero ottenuto è: 0011 0100 0010 0010, pari a +13346 sia in modulo e segno che in complemento a 2. c) si ottiene 0111 1011 0101 0110, pari a +31574 in entrambe le rappresentazioni. d) si ha 1010 0111 1000 1001. In modulo e segno: segno: modulo: 010 0111 1001 1000 valore rappresentato: -10136 In complemento a 2: segno: modulo: 0101 1000 0110 10002 valore rappresentato: -2263210