Lezione 22 (7 maggio 2012)
-
Upload
stelitano -
Category
Entertainment & Humor
-
view
250 -
download
0
Transcript of Lezione 22 (7 maggio 2012)
Abilità Informatiche
Ingegneria Chimica
Lezione 22 del 7/5/2012
Prof. Antonino Stelitano
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
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.
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.
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.
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.
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.
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
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.
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).
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).
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)
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
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.
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,
Addizione
infatti il massimo numero positivo rappresentabile in
complemento a due su quattro bit è 7 (con n=4: 2n-1 - 1 = 7).
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
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
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
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
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
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
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
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
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
[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
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
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
3. Si convertino in binario i seguenti numeri decimali:
3210 = 1000002 6410 = 10000002
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.
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
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
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
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\
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