Problema: rappresentare il segno
Rappresentazione in modulo e segno
Usa il MSB per rappresentare il segno (0 positivo; 1 negativo)
Difetti:
- 0 ha due distinte rappresentazioni;
- Gli algoritmi per le operazioni non funzionano più -> complessità realizzativa -> costi -> non utilizzata
Rappresentazione in complemento a 2
Il MSB mantiene il suo valore ma in negativo.
Possiamo rappresentare 2^n valori MA suddivisi tra positivi e negativi con intervallo: [-2^(k-1); +2^(k-1) -1] (lo 0 rientra tra i positivi)
Rappresentiamo su k bit il numero N:
- Se N >= 0 basta assegnare al MSB 0 e codificare N sui rimanenti k-1 bit
- Se N è negativo inizierà con 1, e poi basta codificare 2^k - N in binario
- oppure sottrarre da 0 in binario
- oppure
- codificare in binario senza segno
- invertire tutti i bit
- incrementare di 1
- (funziona anche al contrario)
NB: non può esserci overflow da operazioni con segno opposto
Rappresentazione in codice eccesso 2^(k-1)
Il numero N viene prima sommato ad una base prefissata pari a 2^(k-1) in modo che il valore risultante sia sempre positivo o nullo e poi codificato come unsigned int.