Il complemento a 1 è una codifica binaria. Il complemento a uno di un numero binario è l'inversione dei suoi bit.
Se con 4 bit 2 è rappresentato come 0010, complemento a 1 di 2 è 1101. I zeri diventano uni e gli uni diventano zeri.
Esempi di complemento a 1:
12 = 1100
Il complemento a 1 di 12 è 0011 che equivale a 3.
4 = 0100
Il suo complemento a 1 è 1011 che equivale a 11.
Trovare il complemento a 1 di un numero equivale ad invertire tutti suoi bit.
La codifica dei numeri relativi sfruttando il complemento a 1, suggerisce di considerare il negativo di un numero come il suo complemento a 1:
12 = 01100
-12 = 10011
Differenze con la codifica modulo-segno:
Con il complemento a 1 è possibile effettuare le somme in maniera tradizionale: con 4 bit rappresentiamo:
Somma tra numeri con segno concorde
1 = 0001
2 = 0010
Il risultato = 0011 che è 3: OK
Somma tra numeri con segno discorde
Per trovare il negativo di 6, facciamo il suo complemento a 1:
6 = 0110
-6 = 1001 (complemento a 1 di 6)
5 = 0101
Risultato = 1110
Il risultato è negativo, per vedere quale numero rappresenta in modulo faccio il complemento a 1:
0001: OK.
Somma tra un numero negativo (come primo addendo) e un numero positivo
-2 = complemento a 1 di 2:
2 = 0010
-2 = 1101
5 = 0101
Risultato = 10010, il numero è negativo vediamo cosa rappresenta in modulo: 01101 che è -2. Il risultato è giusto, ma diminuito di 1, aggiungo l'overflow alla cifra trovata.
0010 + 1 = 0011 = 3: OK.
Somma tra due numeri negativi
-2 = complemento a 1 di 2:
2 = 0010
-2 = 1101
-1 = complemento a 1 di 1:
1 = 0001
-1 = 1110
-2 = 1101
-1 = 1110
risultato = 11011
1011 + 1 = 1100 = -3: OK