La codifica dei numeri in informatica si riferisce al modo in cui i numeri sono rappresentati in un sistema digitale utilizzando una sequenza di bit (0 e 1). Poiché i computer lavorano in base 2 (binario), tutti i numeri — siano essi interi, frazionari o decimali — devono essere convertiti in una forma che possa essere manipolata dalle macchine.
Ecco alcuni dei metodi principali di codifica dei numeri:
1. Codifica Binaria
- Numeri Interi Positivi (Base 2): I numeri interi positivi vengono rappresentati in binario utilizzando una sequenza di bit. Ad esempio, il numero decimale “5” è rappresentato come “101” in binario.
- Conversione da Decimale a Binario: Si divide ripetutamente il numero per 2 e si registrano i resti. I resti, letti al contrario (dal basso verso l’alto), rappresentano il numero in binario.
- Conversione da Binario a Decimale: Si moltiplicano le cifre binarie (bit) per le rispettive potenze di 2 e si sommano i risultati.
2. Codifica Binaria dei Numeri Negativi
Esistono vari metodi per rappresentare i numeri negativi in binario:
- Modulo e Segno: Utilizza il bit più significativo (MSB) per rappresentare il segno (0 per positivo, 1 per negativo) e il resto dei bit per rappresentare il valore assoluto del numero. Ad esempio, per un numero a 8 bit, “00000101” rappresenta +5, mentre “10000101” rappresenta -5.
- Complemento a 1: Inverte tutti i bit del numero positivo per rappresentare il suo equivalente negativo. Ad esempio, il complemento a 1 di “0101” (5) è “1010” (-5). Tuttavia, questo metodo presenta un doppio zero (0000 per +0 e 1111 per -0) che non è ideale.
- Complemento a 2: Il metodo più utilizzato per rappresentare i numeri negativi nei computer. Si calcola invertendo tutti i bit del numero positivo (complemento a 1) e aggiungendo 1 al risultato. Questo metodo ha il vantaggio di avere un unico zero e consente di eseguire le operazioni aritmetiche binarie (come addizione e sottrazione) senza modifiche particolari all’hardware.
- Esempio: Per rappresentare -5 in un sistema a 8 bit:
- Rappresentazione binaria di +5:
00000101
- Complemento a 1:
11111010
- Aggiungi 1:
11111011
(che rappresenta -5).
- Rappresentazione binaria di +5:
- Esempio: Per rappresentare -5 in un sistema a 8 bit:
3. Codifica in Virgola Mobile (Floating Point)
La codifica in virgola mobile è usata per rappresentare numeri molto grandi o molto piccoli, includendo i numeri frazionari. In questa codifica, i numeri sono rappresentati come un “mantissa” (o significand), una “base” (sempre 2 in binario) e un “esponente”.
- Standard IEEE 754: È lo standard più comune per la rappresentazione in virgola mobile, utilizzando una specifica allocazione di bit:
- Singola Precisione (32 bit): 1 bit per il segno, 8 bit per l’esponente (con un bias di 127) e 23 bit per la mantissa.
- Doppia Precisione (64 bit): 1 bit per il segno, 11 bit per l’esponente (con un bias di 1023) e 52 bit per la mantissa.
- Esempio di Virgola Mobile in Singola Precisione (32 bit):
- Il numero decimale 12.375 può essere rappresentato in binario come 1100.011.
- Normalizzando: 1.100011 × 2³.
- Segno: 0 (positivo), Esponente: 3 + 127 = 130 (10000010 in binario), Mantissa: 10001100000000000000000.
- Risultato finale:
0 10000010 10001100000000000000000
.
4. Codifica BCD (Binary-Coded Decimal)
- Rappresenta ogni cifra decimale (0-9) con il suo equivalente binario a 4 bit.
- Ad esempio, il numero decimale “47” è rappresentato in BCD come “0100 0111”.
- È usato principalmente in applicazioni dove è importante preservare la rappresentazione decimale esatta, come in calcolatrici o sistemi finanziari.
5. Codifica Excess-K (Bias o Eccesso-K)
- Utilizzato per rappresentare numeri sia positivi che negativi senza un bit di segno esplicito. Un bias (o “eccesso”) viene aggiunto al valore reale per far sì che tutti i numeri abbiano una rappresentazione positiva.
- Esempio: Excess-127: È comune nella codifica in virgola mobile IEEE 754 a 32 bit. Un esponente di “0” è rappresentato come 127 in binario (01111111), quindi il valore reale dell’esponente è ottenuto sottraendo 127.
6. Codifica Gray
- Utilizzata per minimizzare gli errori nelle transizioni tra valori consecutivi, ad esempio in encoder di posizione. Due valori consecutivi differiscono solo per un bit.
- Per esempio, la sequenza binaria standard per i numeri 0, 1, 2, 3 è:
00, 01, 10, 11
. In codice Gray, è:00, 01, 11, 10
.
7. Codifica Numerica Decimale
- Alcuni sistemi (come COBOL o calcolatrici) utilizzano formati come il packed BCD (dove due cifre decimali sono rappresentate da un byte), o altri schemi per trattare direttamente i numeri decimali senza convertirli in binario, per mantenere precisione esatta in applicazioni finanziarie.
Utilizzo dei Diversi Schemi di Codifica
Ogni tipo di codifica numerica è progettato per un uso specifico:
- Numeri binari semplici: per operazioni aritmetiche veloci e manipolazione diretta dei dati.
- Complemento a 2: per rappresentare numeri interi, positivi e negativi, in modo che le operazioni aritmetiche siano efficienti.
- Virgola mobile: per rappresentare un ampio intervallo di valori con una precisione variabile, utilizzato in calcoli scientifici e ingegneristici.
- BCD: per applicazioni che richiedono precisione decimale, come nelle calcolatrici e nei sistemi bancari.
Questi metodi di codifica consentono ai computer di rappresentare e manipolare numeri in modo efficiente, mantenendo l’integrità e la precisione dei dati in vari contesti.