lezione 22 (7 maggio 2012)
TRANSCRIPT
![Page 1: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/1.jpg)
Abilità Informatiche
Ingegneria Chimica
Lezione 22 del 7/5/2012
Prof. Antonino Stelitano
![Page 2: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/2.jpg)
Docente Antonino Stelitano
Tutor
Lezioni Lunedì
Mercoledì
14:00 – 17:30 aula 16 15:45 – 19:00 aula 17
Lab. Paolo Ercoli – via Tiburtina 205
Ricevimento: Per appuntamento [email protected]
Sito web: http://w3.uniroma1.it/ab_informatiche
![Page 3: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/3.jpg)
Complemento a due
Il complemento a due è il metodo più diffuso per la
rappresentazione dei numeri negativi in informatica. L'espressione
complemento a due viene spesso usata impropriamente per indicare
l'operazione di negazione.
La sua enorme diffusione è data dal fatto che i circuiti di addizione e
sottrazione non devono esaminare il segno di un numero
rappresentato con questo sistema per determinare quale delle due
operazioni sia necessaria, permettendo tecnologie più semplici e
maggiore precisione; si utilizza un solo circuito, il sommatore, sia
per l'addizione che per la sottrazione.
![Page 4: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/4.jpg)
Complemento a due
Col complemento a due, il bit iniziale (più a sinistra) del
numero ha peso negativo o positivo; da questo deriva che
tutti i numeri che cominciano con un "1" sono numeri
binari negativi, mentre tutti i numeri che cominciano con
uno "0" sono numeri binari positivi. Si può così ottenere il
valore assoluto di un numero binario negativo, prendendo
il complementare (invertendo) il valore dei singoli bit e
aggiungendo 1 al numero binario risultante.
![Page 5: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/5.jpg)
Complemento a due
Un numero binario di n cifre può rappresentare
con questo metodo i numeri compresi fra
[-2n-1 , +2n-1-1], così un binario di 8 cifre può
rappresentare i numeri compresi tra -128 e +127.
![Page 6: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/6.jpg)
Complemento a due
Questo metodo consente di avere un'unica
rappresentazione dello zero (quando tutti i bit
sono zero, eliminando così la ridondanza dello
zero che si verifica con la rappresentazione in
modulo e segno), e di operare efficientemente
addizione e sottrazione sempre avendo il primo
bit a indicare il segno.
![Page 7: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/7.jpg)
Complemento a due
Per rappresentare l'opposto di un numero binario in
complemento se ne invertono, o negano, i singoli bit: si
applica cioè
l'[[operazione logica]] [[Negazione (matematica)|NOT]].
Si aggiunge infine 1 al valore del numero trovato con
questa operazione.
![Page 8: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/8.jpg)
Complemento a due
Facciamo un esempio rappresentando il numero -5 con
8 bit in complemento a 2.
Partiamo dalla rappresentazione in binario del numero 5:
0000 0101 (5)
La prima cifra è 0, quindi il numero è sicuramente
positivo. Invertiamo i bit: 0 diventa 1, e 1 diventa 0:
1111 1010
![Page 9: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/9.jpg)
Complemento a due Il complemento a due di un numero negativo ne
restituisce il numero positivo pari al valore assoluto:
invertendo i bit della rappresentazione del numero -5
(sopra) otteniamo:
0000 0100
Aggiungendo 1 otteniamo:
0000 0101
Che è appunto la rappresentazione del numero +5
in forma binaria.
![Page 10: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/10.jpg)
Complemento a due
Si noti che il complemento a due dello zero è zero
stesso: invertendone la rappresentazione si ottiene un
byte di 8 bit pari a 1, e aggiungendo 1 si ritorna a tutti
0 (l'overflow viene ignorato).
![Page 11: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/11.jpg)
Complemento a due
Si noti che il complemento a due dello zero è zero
stesso: invertendone la rappresentazione si ottiene un
byte di 8 bit pari a 1, e aggiungendo 1 si ritorna a tutti
0 (l'overflow viene ignorato).
![Page 12: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/12.jpg)
Addizione
Operare l'addizione di due interi rappresentati con
questo metodo non richiede processi speciali se essi
sono di segno opposto, e il segno viene determinato
automaticamente. Facciamo un esempio addizionando
15 e -5:
11111 1110 (riporto)
0000 1111 (15)
+ 1111 1011 (-5)
========
0000 1010 (10)
![Page 13: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/13.jpg)
Questo processo gioca sulla lunghezza fissa di 8 bit
della rappresentazione: viene ignorato un riporto di 1
che causerebbe un overflow, e rimane il risultato
corretto dell'operazione (10).
Addizione
![Page 14: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/14.jpg)
Gli ultimi due bit (da destra a sinistra), ovvero i più
significativi, della riga dei riporti contengono importanti
informazioni sulla validità dell'operazione: se il risultato è
compreso o non è compreso nell'intervallo dei numeri
rappresentabili. Si verifica se il riporto è stato eseguito sul
bit del segno ma non è stato portato fuori, o viceversa;
Addizione
più semplicemente, se i due bit più a sinistra sulla riga dei
riporti non sono entrambi 0 o 1. Per verificare la validità del
risultato è conveniente eseguire su questi due bit
un'operazione EXOR.
![Page 15: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/15.jpg)
Addizione
01110 (riporto) 0111 (7) + 0011 (3)
=========== 1010 (-6)
Vediamo un esempio di addizione a 4 bit di 7 e 3:
In questo caso, come si può notare dal riporto presente solo
sul bit più significativo, si è in presenza di overflow, per cui il
risultato non è 10 (come sarebbe corretto) ma -6,
![Page 16: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/16.jpg)
Addizione
infatti il massimo numero positivo rappresentabile in
complemento a due su quattro bit è 7 (con n=4: 2n-1 - 1 = 7).
![Page 17: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/17.jpg)
Esercizi
Dati i seguenti numeri decimali interi positivi: 55, 121, 16, 42
– Rappresentarli come numeri binari su 8 bit – Determinare i numeri negativi corrispondenti in binario con le seguenti rappresentazioni: • Valore assoluto e segno
• In complemento a 1
• In complemento a 2
![Page 18: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/18.jpg)
5510
55/2 = 27 con resto 1 27/2 = 13 con resto 1 13/2 = 6 con resto 1 6/2 = 3 con resto 0 3/2 = 1 con resto 1 1/2 = 0 con resto 1
5510 = 001101112
![Page 19: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/19.jpg)
12110
121/2 = 60 con resto 1 60/2 = 30 con resto 0 30/2 = 15 con resto 0 15/2 = 7 con resto 1 7/2 = 3 con resto 1 3/2 = 1 con resto 1 1/2 = 0 con resto 1
12110 = 011110012
![Page 20: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/20.jpg)
1610
16/2 = 8 con resto 0 8/2 = 4 con resto 0 4/2 = 2 con resto 0 2/2 = 1 con resto 0 1/2 = 0 con resto 1
1610 = 000100002
![Page 21: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/21.jpg)
4210
42/2 = 21 con resto 0 21/2 = 10 con resto 1 10/2 = 5 con resto 0 5/2 = 2 con resto 1 2/2 = 1 con resto 0 1/2 = 0 con resto 1
4210 = 001010102
![Page 22: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/22.jpg)
5510 = 0 0 1 1 0 1 1 12
-5510 = 1 0 1 1 0 1 1 12
1610 = 0 0 0 1 0 0 0 02
-1610 = 1 0 0 1 0 0 0 02
CODIFICA IN MODULO E SEGNO
12110 = 0 1 1 1 1 0 0 12
-121 10 = 1 1 1 1 1 0 0 12
4210 = 0 0 1 0 1 0 1 02
-4210 = 1 0 1 0 1 0 1 02
![Page 23: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/23.jpg)
5510 = 0 0 1 1 0 1 1 12
-5510 = 1 1 0 0 1 0 0 02
12110 = 0 1 1 1 1 0 0 12
-12110 = 1 0 0 0 0 1 1 02
1610 = 0 0 0 1 0 0 0 02
-1610 = 1 1 1 0 1 1 1 12
4210 = 0 0 1 0 1 0 1 02
-4210 = 1 1 0 1 0 1 0 12
CODIFICA IN COMPLEMENTO A 1
![Page 24: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/24.jpg)
CODIFICA IN COMPLEMENTO A 2
5510 = 0 0 1 1 0 1 1 12
-5510 = 1 1 0 0 1 0 0 12
12110 = 0 1 1 1 1 0 0 12
-12110 = 1 0 0 0 0 1 1 12
1610 = 0 0 0 1 0 0 0 02
-1610 = 1 1 1 1 0 0 0 02
4210= 0 0 1 0 1 0 1 02
-4210 = 1 1 0 1 0 1 1 02
![Page 25: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/25.jpg)
Esercizi
• Fare la somma dei numeri binari in complemento a 2 codificati su n = 8 bit che
corrispondono ai numeri 16dieci e –42dieci
• Fare la somma dei numeri binari in complemento a 2 codificati su n = 6 bit che
corrispondono ai numeri -5dieci e –28dieci
![Page 26: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/26.jpg)
[16] 0 0 0 1 0 0 0 0 + [-42] 1 1 0 1 0 1 1 0 1 1 1 0 0 1 1 0
1 1 1 0 0 1 1 0 Segno: negativo (1) Modulo del numero: si ottiene facendo il complemento a 2 di : 1 1 0 0 1 1 0 0 0 1 1 0 1 0
16 + 8 + 2 = 26 Quindi –2610
… oppure si calcola: (–1)x2^6+1x2^5+1x2^2+1x2^1= –64+32+4+2 = –2610
Soluzioni degli esercizi
Somma di numeri in complemento a 2
![Page 27: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/27.jpg)
011111 Segno: positivo (0) Modulo del numero: si ottiene facendo il complemento a 2 di: 1 1 1 1 1 0 0 0 0 1 1
Quindi: risultato = +110 che non è ciò che ci aspettavamo
Soluzioni degli esercizi
510 = 0001012 su n = 6 bit 2810= 0111002 su n = 6 bit
- 510 = 1110112 su n = 6 bit - 2810 = 1001002 su n = 6 bit
Soluzioni degli esercizi
Somma di numeri in complemento a 2
[-5] 1 1 1 0 1 1 + [-28] 1 0 0 1 0 0 (1 )0 1 1 1 1 1 rip 1 0 overflow
![Page 28: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/28.jpg)
Conversioni binario-decimale e decimale-binario 1. Si convertano in decimale i seguenti numeri
325 = 2 5 + 2 = 12 334 = 3 4 + 3 = 15
1233 = 1 9 + 2 3 + 3 = 18 32016 = 3 216 + 2 36 + 1 = 721
2. Si convertano i seguenti numeri decimali in base 5
102310 1023=5 = 204; resto = 3 204=5 = 40; resto = 4 40=5 = 8; resto = 0 8=5 = 1; resto = 3 1=5 = 0; resto = 1
La soluzione e 130435
![Page 29: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/29.jpg)
3. Si convertino in binario i seguenti numeri decimali:
3210 = 1000002 6410 = 10000002
![Page 30: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/30.jpg)
75310:
Numero Cifra 753/2=376 1 376/2=188 0 188/2=94 0 94/2= 47 0 47/2=23 1 23/2=11 1 11/2=5 1 5/2=2 1 2/2=1 0 1/2=0 1
La soluzione e 10111100012.
![Page 31: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/31.jpg)
Si convertino in decimale i seguenti numeri binari: 100101011001102 Cifra Operazione Numero 1 1 1 0 1*2+0 2 0 2*2+0 4 1 4*2+1 9 0 9*2+0 18 1 18*2+1 37 0 37*2+0 74 1 74*2+1 149 1 149*2+1 299 0 299*2+0 598 0 598*2+0 1196 1 1196*2+1 2393 1 2393*2+1 4787 0 4787*2 9574
![Page 32: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/32.jpg)
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.
Soluzione: Si consideri 335. Per la conversione in base 2 si ha: Divisioni Resti 335/2 = N0 = 167 R0 = 1 N0/2 = N1 = 83 R1 = 1 N1/2 = N2 = 41 R2 = 1 N2/2 = N3 = 20 R3 = 1 N3/2 = N4 = 10 R4 = 0 N4/2 = N5 = 5 R5 = 0 N5/2 = N6 = 2 R6 = 1 N6/2 = N7 = 1 R7 = 0 N7/2 = N8 = 0 R8 = 1
![Page 33: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/33.jpg)
Pertanto risulta: (335)10 = (101001111)2. Per la conversione in base 8 si ha:
Divisioni Resti 335/8 = N0= 41 R0 = 7 N0/8 = N1 = 5 R1 = 1 N1/8 = N2 = 0 R2 = 5
Il risultato è: (335)10 = (517)8. Per la conversione in base 16: Divisioni Resti 335/16 => N0 = 20 R0 = 15 N0/16 => N1 = 1 R1 = 4 N1/16 => N2 = 0 R2 = 1
Il risultato è: (335)10 = (14F)16
![Page 34: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/34.jpg)
Si consideri ora 564. Per la conversione in base 2 si ha:
Divisioni Resti 564/2 = N0 = 282 R0 = 0 N0/2 = N1 = 141 R1 = 0 N1/2 = N2 = 70 R2 = 1 N2/2 = N3 = 35 R3 = 0 N3/2 = N4 = 17 R4 = 1 N4/2 = N5 = 8 R5 = 1 N5/2 = N6 = 4 R6 = 0 N6/2 = N7 = 2 R7 = 0 N7/2 = N8 = 1 R8 = 0 N8/2 = N9 = 0 R9 =1\
![Page 35: Lezione 22 (7 maggio 2012)](https://reader035.vdocuments.net/reader035/viewer/2022062419/557bed39d8b42a302d8b49e3/html5/thumbnails/35.jpg)
Pertanto risulta: (564)10 = (1000110100)2. Conversione in base 8:
Divisioni Resti 564/8 = N0 = 70 R0 = 4 N0/8 = N1 = 8 R1 = 6 N1/8 = N2 = 1 R2 = 0 N2/8 = N3 = 0 R3 = 1
ù Il risultato è: (564)10 = (1064)8. Conversione in base 16:
Divisioni Resti 564/16 = N0 = 35 R0 = 4 N0/16 = N1 = 2 R1 = 3 N1/16 = N2 = 0 R2 = 2
Il risultato è: (564)10 = (234)16