3. 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.
4. 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.
5. 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.
6. 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.
7. 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.
8. 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
9. 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.
10. 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).
11. 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).
12. 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)
13. Addizione
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).
14. 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;
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.
15. Addizione
Vediamo un esempio di addizione a 4 bit di 7 e 3:
01110 (riporto)
0111 (7)
+ 0011 (3)
===========
1010 (-6)
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,
16. Addizione
infatti il massimo numero positivo rappresentabile in
complemento a due su quattro bit è 7 (con n=4: 2n-1 - 1 = 7).
17. 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
18. 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
19. 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
20. 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
21. 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
25. 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
26. Soluzioni degli esercizi
Somma di numeri in complemento a 2
11100110
[16] 0 0 0 1 0 0 0 0 +
Segno: negativo (1)
[-42] 1 1 0 1 0 1 1 0
Modulo del numero: si
ottiene facendo il complemento a 2 di :
11100110
11001100011010
16 + 8 + 2 = 26
Quindi –2610
… oppure si calcola:
(–1)x2^6+1x2^5+1x2^2+1x2^1=
–64+32+4+2 = –2610
27. Soluzioni degli esercizi
Somma di numeri in complemento a 2
510 = 0001012 su n = 6 bit - 510 = 1110112 su n = 6 bit
2810= 0111002 su n = 6 bit - 2810 = 1001002 su n = 6 bit
[-5] 111011+ 011111
Segno: positivo (0)
[-28] 1 0 0 1 0 0 Modulo del numero: si
ottiene facendo il complemento a 2 di:
(1 )0 1 1 1 1 1
11111000011
rip 1 0 overflow
Quindi: risultato = +110 che
non è ciò che ci aspettavamo
28. 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
29. 3. Si convertino in binario i seguenti numeri decimali:
3210 = 1000002
6410 = 10000002
30. 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.