Un modo veloce per calcolare il complemento a 2 è trovare l'uno nella sequenza binaria ed invertire tutte le cifre successive: se ho 001, l'uno è il più a destra, e lo lascio invariato, da quel bit in poi inverto tutto: 001 -> complemento a 2-> 111.
Con questa codifica, i negativi sono rappresentati come il complemento a 2 dei numeri positivi.
Avendo tre bit:
000 = 0
Il suo complemento a 2 è: 111 + 1 = 1000, non considero l'overflow, quindi sempre 000.
001 = 1
Il suo complemento a 2 è: 110 + 1 = 111 quindi -1 = 111.
010 = 2
Il suo complemento a 2 è: 101 + 1 = 110 quindi -2 = 110.
011 = 3
Il suo complemento a 2 è: 100 + 1 = 101 quindi -3 = 101
Cosa sarà 100? Il bit più significativo è 1, potrebbe essere -0, tuttavia abbiamo visto che il complemento a 2 di 000 è sempre 000. Per cui 100 è -4.
Cosa è cambiato rispetto alla codifica con complemento a 2:
Proprietà:
NOTA: avendo a disposizione k bit con codifica che sfrutta il complemento a 2, se il bit di segno è uguale a 0, non serve effettuare il complemento a 2 per vedere quale numero rappresenta. Solo se il numero è negativo (bit significativo a 1) occorre effettuare una operazione di complemento a due per vedere a quale numero si riferisce in modulo.
Criteri per trovare l'occorrenza di un overflow
ci sono addendi dello stesso segno e il segno del risultato è diverso da quello dei due addendi (1 +1 avrà come risultato un numero con segno positivo, non è possibile che restituisce un negativo).
oppure, si possono guardare le ultime due colonne (colonne più a sinistra) nell'operazione in colonna, e controllare i riporti. Se i riporti delle due colonne sono discordi si è verificato un overflow. Esempio:
1011
1101
11000
La penultima colonna scrive 0 riportando 1
Mentre l'ultima scrive 1 riportando 1
Riporti discordi: overflow.
Esempio opposto:
1101
0010
1111
La penultima colonna scrive 1 riportando 0
L'ultima scrive 1 riportando 0
Riporti concordi: nessun overflow.