Rappresentazione dei numeri relativi
Le rappresentazioni Signed Number sono usate per risolvere il problema di rappresentare gli interi negativi in binario. Il problema di cercare di memorizzare il segno negativo (-) di un numero binario è che non ci sono più stati da usare per rappresentare l'assegnazione negativa. Non è possibile usare semplicemente 'off' per il meno e 'on' per il più perché il computer non avrebbe modo di sapere se si tratta di una cifra o di un segno.
Per superare questo problema i progettisti di computer hanno inventato due metodi per memorizzare i numeri binari negativi: segno-e-magnitudine e complemento a 2. Questi producono rappresentazioni alternative per i numeri firmati.
Segno e magnitudine
Sign and Magnitude funziona cambiando il bit più significativo (MSB - la prima cifra) in un 1 se il numero è negativo, e ridurre il numero di uno, per esempio:
0000 0010 (2)
diventerà...
1000 0010 (-2)
Questo metodo di memorizzazione dei numeri binari negativi non funziona perché:
- L'aritmetica binaria non funziona.
- Dobbiamo prima sapere quale meccanismo di memorizzazione usa il compilatore di un particolare linguaggio.
Complemento 1
Il complemento di 1 funziona scambiando gli 1 con gli 0 e gli 0 con gli 1, per esempio:
0000 0010 (2)
diventerà...
1111 1101 (-2)
Molto simile al metodo sign-and-magnitude questo è facilmente definito come un numero negativo perché il suo bit più significativo è 1
complemento a 2
Il complemento a 2 è un modo più difficile di memorizzare i negativi. Ci sono tre passaggi per esso:
- Trova il numero binario positivo (per esempio 8base 10 = 0000 1000base 2).
- Scambiate gli 1 con gli 0 e gli 0 con gli 1 (per esempio 0000 1000base 2 diventa 1111 0111base 2).
Questo è noto come "capovolgere i bit", o applicare il NOT logico alla rappresentazione originale in base 2.
- Aggiungere 1 (per esempio 1111 0111base 2 + 1base 2 = 1111 1000base 2).
Questo metodo piace perché:
- È come il segno e la grandezza; un numero negativo inizia con un 1 e un numero positivo inizia con uno 0.
- L'aritmetica binaria funzionerà.
- C'è solo un valore per 0 (0000 0000base 2).