La codifica complemento a due

A. Costantini | (la videolezione) Il complemento a due, meglio conosciuto in inglese come two's complement, rappresenta il metodo più diffuso ed utilizzato per eseguire la rappresentazione del numero con segno di informatica. La sua enorme diffusione è dovuta al fatto che i circuiti di addizione e sottrazione non devono prestare attenzione al segno del numero. Con il complemento a due, il bit iniziale può avere valore positivo o negativo, da questo deriva che tutti i numeri che cominciano con un "1" sono numeri binari negativi, mentre quelli che iniziano con "0" sono numeri binari positivi. Attraverso questo metodo è possibile operare efficacemente addizioni o sottrazioni sempre avendo il primo bit che ci indicherà il relativo segno (in sostanza con un solo circuito, quello dell'addizione, sarà possibile eseguire anche la sottrazione). Un numero binario di n cifre può rappresentare, con questo metodo, i numeri compresi tra -2^(n-1) a 2^(n-1)-1, di modo che un binario di 8 cifre (8 bit) può rappresentare i numeri compresi tra -128 e +127. Supponiamo di voler convertire il numero 5, dobbiamo per prima cosa rappresentarlo in binario (in questo esempio supponiamo di avere a disposizione 8 bit). Tale rappresentazione del 5 verrà effettuato in questo modo: 00000101. La prima cifra è 0, per cui il numero è sicuramente positivo. Se invertiamo i bit così che 0 diventa 1 e 1 diventa 0 la sequenza cambierà nel seguente modo 11111010. A questo punto abbiamo ottenuto il complemento a uno del numero 5, per ottenere il complemento a due sommiamo 1, ottenendo quindi:

11111010 + 00000001 = 11111011

Il risultato ottenuto è un numero binario che rappresenta il numero negativo -5 secondo il complemento a due. Si noti che il primo bit è uguale a 1 evidenziando così che il numero è negativo. Prendendo in considerazione la numerazione sopra esposta, se volessimo trovare il numero positivo dovremmo invertire i bit della rappresentazione del numero -5 ottenendo 0000 0100. Sommando 1 otteniamo:

00000100 + 00000001 = 00000101