Esercitazione 2 Soluzione es 3-4

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