Complemento a due
Dati di input
| Direzione | Decimale → Binario |
|---|---|
| Ampiezza in bit | 8 bit |
| Valore decimale | -42 |
| Stringa binaria | 11010110 |
Complemento a due
Converti un intero con segno nella rappresentazione binaria e decimale in complemento a due, o decodifica una stringa binaria nel valore decimale con segno. Scegli tra registri a 8, 16, 32 o 64 bit.
Dati di input
Parametri
Risultati
Inserisci un valore per visualizzare i risultati.
Rappresentazione
Il complemento a due
Il complemento a due è il metodo standard con cui i calcolatori digitali memorizzano e gestiscono gli interi con segno. Ogni architettura di processore diffusa — x86, ARM, RISC-V, MIPS — lo adotta per le proprie unità di aritmetica intera, perché la codifica consente di eseguire la sottrazione con lo stesso circuito dell'addizione e produce un unico schema di bit per lo zero.
Schema di codifica
Un registro a N bit in complemento a due contiene schemi di bit distinti. Metà di essi rappresentano interi non negativi ( a ), l'altra metà interi negativi ( a ). La proprietà fondamentale è che il bit più significativo — il bit più a sinistra — funge da bit di segno: 0 per i valori non negativi, 1 per i valori negativi.
Per gli interi non negativi la codifica è identica al binario senza segno ordinario. Ad esempio, il numero 42 in un registro a 8 bit è:
Calcolo del complemento a due di un numero negativo
Per ricavare la codifica in complemento a due di un intero negativo (con ) in un registro a N bit, si somma al valore:
Per a 8 bit: . Scritto in binario e raggruppato in nibble:
21410=110101102=0xD6Un metodo pratico alternativo consiste nell'invertire tutti i bit della codifica del valore positivo e poi aggiungere 1:
- Inversione dei bit:
- Addizione di 1: ✓
Entrambi i procedimenti producono lo stesso risultato.
Lettura di un valore in complemento a due
Per convertire una stringa binaria in complemento a due nel corrispondente valore decimale con segno, si esamina il bit di segno:
- Se il bit iniziale è 0, il valore è non negativo. Si legge come binario senza segno ordinario: .
- Se il bit iniziale è 1, il valore è negativo. Si sottrae dall'interpretazione senza segno: , quindi .
Intervalli rappresentabili
Il bit di segno dimezza l'intervallo rispetto al binario senza segno. Un registro a N bit in complemento a due può rappresentare:
| Ampiezza | Minimo | Massimo |
|---|---|---|
| 8 bit | −128 | 127 |
| 16 bit | −32.768 | 32.767 |
| 32 bit | −2.147.483.648 | 2.147.483.647 |
| 64 bit | −9.223.372.036.854.775.808 | 9.223.372.036.854.775.807 |
L'asimmetria — sempre un valore negativo in più rispetto ai valori positivi — deriva dal fatto che lo zero occupa una delle posizioni non negative, lasciando valori strettamente positivi accanto a valori negativi.
Overflow
Quando il risultato di un'operazione aritmetica cade al di fuori dell'intervallo rappresentabile, il valore si avvolge — un fenomeno chiamato overflow. Con un registro a 8 bit, aggiungere 1 a 127 produce , che è la codifica di −128. I processori impostano generalmente un flag di overflow affinché il software possa rilevare e gestire questa condizione; l'operazione sui bit è comunque una semplice addizione modulare.
Confronto con la rappresentazione segno-valore assoluto
Una codifica alternativa, denominata segno-valore assoluto, riserva un bit al segno e i rimanenti N−1 bit al valore assoluto. Questo schema presenta due limitazioni. In primo luogo, lo zero ha due codifiche — zero positivo () e zero negativo () — il che costringe i confronti a trattare un caso speciale. In secondo luogo, l'addizione tra numeri di segno opposto richiede una logica separata per determinare quale operando sia maggiore e se eseguire un'addizione o una sottrazione. Il complemento a due risolve entrambi i problemi: un unico circuito sommatore gestisce tutti i casi e lo zero ha esattamente una rappresentazione ().
Domande frequenti (FAQ)
Perché si usa il complemento a due invece della rappresentazione segno-valore assoluto?
La rappresentazione segno-valore assoluto dedica un bit separato al segno e i rimanenti bit al valore assoluto. Questo approccio produce due codifiche dello zero — zero positivo e zero negativo — e richiede circuiti distinti per addizione e sottrazione.
Il complemento a due elimina entrambi i problemi: lo zero ha un unico schema di bit e lo stesso circuito sommatore gestisce sia i valori positivi sia quelli negativi, senza casi particolari. Per questa ragione ogni processore moderno utilizza il complemento a due per l'aritmetica intera.
Qual è l'intervallo di un intero con segno a 8 bit?
Un intero in complemento a due a 8 bit può rappresentare 256 valori in totale: da −128 a 127. Il valore più negativo (−128) corrisponde allo schema di bit 10000000, dove il bit iniziale uguale a 1 indica un valore negativo. Il valore più positivo (127) corrisponde a 01111111. L'asimmetria — un valore negativo in più — deriva dal fatto che lo zero occupa una delle posizioni non negative.
Per un registro a N bit, l'intervallo è −2^(N−1) a 2^(N−1) − 1: per 16 bit da −32.768 a 32.767, per 32 bit da −2.147.483.648 a 2.147.483.647.
Da provare dopo
Convertitore di rappresentazione IPv4
Inserisci un indirizzo IPv4 in notazione decimale puntata per vederlo come intero a 32 bit, valore esadecimale e binario puntato. Utile per leggere catture di pacchetti, costruire liste di controllo degli accessi e capire come vengono memorizzati gli indirizzi.