Inserisci un numero binario per ottenere il suo complemento a due:
Nota: Il complemento a due si usa per rappresentare numeri negativi in binario.
Funziona su stringhe binarie senza segno (es. 4 o 8 bit).
Funziona su stringhe binarie senza segno (es. 4 o 8 bit).
Cos’è il complemento a due?
Il complemento a due è un metodo di codifica binaria per rappresentare numeri interi con segno (positivi e negativi) in un certo numero di bit. È lo standard più diffuso nei calcolatori perché permette di usare la stessa circuiteria per l’addizione sia dei numeri positivi sia di quelli negativi, semplificando l’hardware.
Rappresentazione
Sia n il numero di bit disponibili.
- I numeri positivi (e lo zero) si codificano normalmente in binario, da
000…0
a011…1
. - I numeri negativi si ottengono applicando questi due passi al positivo corrispondente:
- Invertire (complementare) tutti i bit (bitwise NOT).
- Aggiungere 1 al risultato.
Il bit più significativo (MSB) vale −2ⁿ⁻¹, mentre gli altri bit valgono +2^k per k da 0 a n−2.
Esempio con 4 bit
Decimale | Valore teorico | Binario (unsigned) | Complemento a due |
---|---|---|---|
+7 | 0·2³ + 1·2² + 1·2¹ + 1·2⁰ | 0111 | 0111 |
+3 | 0·2³ + 0·2² + 1·2¹ + 1·2⁰ | 0011 | 0011 |
0 | tutti zeri | 0000 | 0000 |
−1 | −(1) | complemento di 0001 + 1 = 1111 | 1111 |
−2 | −(2) | comp. di 0010 + 1 = 1110 | 1110 |
−3 | −(3) | comp. di 0011 + 1 = 1101 | 1101 |
−8 | −(8) = −2³ | comp. di 1000 + 1 = 1000 | 1000 |
Nota: con 4 bit si rappresentano numeri da −8 a +7.
Conversione da decimale a complemento a due
- Se il numero è positivo o zero: scrivilo in binario con n bit (aggiungi zeri a sinistra).
- Se il numero è negativo:
- Trova il binario non segnato di |N| in n bit.
- Inverti tutti i bit.
- Somma 1 al risultato.
Esempio: −5 con 8 bit
- +5 →
00000101
- Inverti →
11111010
- +1 →
11111011
Risultato: 11111011
Proprietà
- Unica rappresentazione dello zero: c’è solo
000…0
, non esiste “−0”. - Addizione uniforme: per sommare due numeri in complemento a due non serve distinguere il segno; il flusso di riporto (carry) finale viene ignorato.
- Range: con n bit si rappresentano da −2ⁿ⁻¹ a +2ⁿ⁻¹−1.
Perché usarlo?
- Semplifica l’hardware (stessa operazione di somma per tutti i casi).
- Evita ambiguità (solo uno zero).
- È efficiente: non serve circuito aggiuntivo per la gestione del segno.