L'addizione fra due numeri binari si esegue esattamente come la somma fra numeri decimali: si sommano fra di loro le cifre a due a due con l'eventuale riporto dalla somma delle cifre precedenti. Un esempio dovrebbe chiarire il concetto:
Si noti che se c'è un riporto finale significa che il numero di bit (3 nel nostro caso) non è sufficiente a rappresentare il risultato (che infatti richiede 4 bit). Una condizione del genere prende il nome di overflow e si verifica quando il risultato di un'operazione "straripa" dai bit assegnati. Volendo in una somma il bit di riporto può essere usato per segnalare un potenziale overflow (se è uguale a 1).
Anche la sottrazione in binario segue le stesse regole della sottrazione fra numeri decimali: si sottraggono fra loro le cifre corrispondenti a due a due, eventualmente prendendo un prestito (borrow) dalla cifra precedente:
Si osservi che sottraendo la sottrazione 0 - 1 non può essere fatta, ma occorre prendere in prestito un 1 dalla cifra seguente.
Cosa succede però se, seguendo lo stesso metodo, si prova ad eseguire una sottrazione che fornisce un risultato negativo?
Si noti il risultato apparentemente assurdo: 110 in binario corrisponderebbe al numero 6 e non al risultato della sottrazione (che dovrebbe essere -2). Il problema è appunto quello di come rappresentare i numeri negativi in binario. Dal momento che in un sistema digitale non esiste nessun simbolo particolare che possa rappresentare il segno meno o il segno più, tale segno dovrà essere in qualche modo rappresentato usando i bit.
Vedremo subito come e capiremo anche che il risultato della precedente sottrazione, 110, se interpretato correttamente, è proprio il valore -2 corretto.
Per rappresentare in binario i numeri negativi è necessario riservare un bit per la rappresentazione del segno. La soluzione più semplice consiste nell'indicare il segno per mezzo del primo bit del numero (il bit più significativo). Scegliendo la convenzione che i numeri positivi iniziano con 0 e quelli negativi con 1 avremo ad esempio dunque che:
(0101)2 = (+5)10 (1101)2 = (-5)10
E' evidente che, volendo rappresentare anche valori negativi, con 4 bit per esempio il massimo numero rappresentabile sarà 0111 cioè +7 e il minimo 1111 = -7. In pratica l'intero intervallo di valori (24=16 valori, nel nostro caso) viene diviso a metà, riservandone una parte per i numeri negativi e una per i numeri positivi: lo zero, con questa convenzione, può essere indicato in due modi diversi: 0000 (+0) oppure 1000 (-0).
Una soluzione più efficiente (e quella praticamente adottata in tutti i sistemi di calcolo) consiste nel rappresentare i numeri negativi col metodo del complemento a due.
PRIMO METODO
Per scrivere un numero negativo, per esempio -6, si parte dal corrispondente numero positivo, scritto lasciando il primo bit per il segno:
(0110)2 = (+6)10
A questo punto si invertono tutti i bit del numero, cioè si scambiano gli zero con gli uno e viceversa. Questa operazione viene detta complemento a uno. Nel nostro caso:
0110 → 1001
A questo punto si prende il numero così ottenuto e ci si aggiunge uno. Il valore che si ottiene rappresenta il complemento a 2 del numero di partenza:
1001 + 1 = 1010 = (-6)10
Si noti che il primo bit distingue sempre i numeri positivi da quelli negativi.
E' interessante notare che eseguendo di nuovo il complemento a due del numero ottenuto, si ottiene nuovamente il numero positivo di partenza:
1010 → 0101 + 1 = 0110
SECONDO METODO
Un modo alternativo per calcolare il complemento a 2 di un numero consiste nel fare la differenza fra 2n+1 (con n = numero di bit, vedi esempio sotto) e il numero stesso N senza segno:
2n+1- |N|
Facciamo un esempio. Supponiamo di nuovo di voler fare il complemento a 2 di -6. Il numero +6 in binario è 110 dunque n=3. Calcoliamo dunque:
2n+1- |N| = 24- |-6| = 16 - 6 = 10 (dieci)
A questo punto convertiamo il risultato in binario e troviamo subito il complemento a 2 di -6:
(10)2 = (1010)2
SOTTRAZIONE IN COMPLEMENTO A 2
La notazione in complemento a due è molto utile perché consente di eseguire le sottrazioni in binario con le stesse regole delle somme. Supponiamo di voler effettuare l'operazione 7 - 6. Tale operazione può naturalmente essere scritta così
7 - 6 = 7 + (-6)
Usando la notazione in complemento a 2 per rappresentare il valore negativo -6, la sottrazione può essere eseguita usando le stesse regole valide per le somme:
In questo caso il riporto finale viene semplicemente scartato e non può venire usato per segnalare eventuali overflow.
Osserviamo che anche la sottrazione può essere eseguita normalmente senza problemi, se si usa la notazione in complemento a 2. Con riferimento all'esempio visto prima:
Il valore 110 è un numero negativo (il bit più significativo è 1) che in complemento a due rappresenta -2. Infatti, ricomplementando a 2 il valore, abbiamo:
110 → 001 + 1 = 010
Come si vede dunque la notazione in complemento a due è il modo più semplice e naturale per rappresentare i numeri negativi in un sistema binario digitale.
Sito realizzato in base al template offerto da
http://www.graphixmania.it