So che ha qualcosa a che fare con il complemento di 2 e l'aggiunta di 1, ma non capisco come si possa codificare un altro numero con la stessa quantità di bit quando si tratta di numeri negativi.
So che ha qualcosa a che fare con il complemento di 2 e l'aggiunta di 1, ma non capisco come si possa codificare un altro numero con la stessa quantità di bit quando si tratta di numeri negativi.
Risposte:
Pensaci in questi termini. Prendi un numero a 2 bit con un segno precedente:
000 = 0
001 = 1
010 = 2
011 = 3
Ora diamo alcuni aspetti negativi:
111 = -1
110 = -2
101 = -3
Aspetta, abbiamo anche
100 ...
Deve essere negativo, poiché il bit di segno è 1. Quindi, logicamente, deve essere -4.
(Modifica: come giustamente sottolinea WorldEngineer , non tutti i sistemi di numerazione funzionano in questo modo, ma quelli su cui ti stai chiedendo lo fanno.)
Perché non ci sono due classi di numeri nell'intervallo intero, ma tre: numeri negativi, zero e numeri positivi. Lo zero deve occupare uno slot (sarebbe piuttosto impraticabile non essere in grado di rappresentare lo zero ...), quindi la classe positiva o negativa deve rinunciare a uno slot. Il fatto che di solito è l'intervallo positivo che deve rendere quel sacrificio è in una certa misura arbitrario, ma a livello di manipolazioni dei bit ci sono alcune cose che questa decisione rende più conveniente.
Esistono fondamentalmente tre modi per rappresentare numeri interi con segno in binario: complemento di 2, complemento di 1 e magnitudine del segno. (Il Biquinary ha seguito la strada dell'uccello Dodo molto tempo fa.)
Il complemento e la grandezza del segno di 1 hanno due valori zero, +0 e -0, ciascuno con una rappresentazione unica. Il complemento di 2 ha solo un valore zero e una rappresentazione.
Ora, un campo di N bit può codificare 2 ^ N valori. Sottrai uno dal complemento di 2 e avrai 2 ^ N-1 = 2 ^ (N-1) + 2 ^ (N-1) + 1. Poiché la rappresentazione per zero è tutta zero bit e un segno + è zero, ci sarà un'altra possibile rappresentazione diversa da zero con il bit di segno impostato su 1.
Questo è un modo molto lungo di dire che il complemento di 2 rappresenta i valori nell'intervallo - (2 ^ (N-1)) .. + (2 ^ (N-1) - 1).
Il complemento di 1 in realtà ha un vantaggio rispetto al complemento di 2 se si eseguono calcoli di elaborazione del segnale digitale intero. Le operazioni del complemento di 1 sono intrinsecamente troncate verso zero. Il complemento di 2 si tronca verso l'infinito. L'ho imparato nel modo DURO ...