Calcolatore di complemento a due

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).

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 a 011…1.
  • I numeri negativi si ottengono applicando questi due passi al positivo corrispondente:
    1. Invertire (complementare) tutti i bit (bitwise NOT).
    2. 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

DecimaleValore teoricoBinario (unsigned)Complemento a due
+70·2³ + 1·2² + 1·2¹ + 1·2⁰01110111
+30·2³ + 0·2² + 1·2¹ + 1·2⁰00110011
0tutti zeri00000000
−1−(1)complemento di 0001 + 1 = 11111111
−2−(2)comp. di 0010 + 1 = 11101110
−3−(3)comp. di 0011 + 1 = 11011101
−8−(8) = −2³comp. di 1000 + 1 = 10001000

Nota: con 4 bit si rappresentano numeri da −8 a +7.

Conversione da decimale a complemento a due

  1. Se il numero è positivo o zero: scrivilo in binario con n bit (aggiungi zeri a sinistra).
  2. 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

  1. +5 → 00000101
  2. Inverti → 11111010
  3. +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.