Conversione da decimale in virgola fissa
Esistono diversi modi per rappresentare numeri in virgola fissa, ma il sistema più utilizzato è quello in modulo/segno (analogamente alla conversione in virgola mobile). Tuttavia, talvolta si usa anche la conversione in complemento a 2.
Conversione in formato modulo/segno
Si procede come segue:
- si calcola il valore assoluto del numero
- si converte la parte intera eseguendo delle divisioni per due fino a quando il quoziente è 0; i resti, letti dal baso verso l'alto, rappresentano la conversione
- si converte la parte frazionaria eseguendo delle moltiplicazioni per due; le unità, lette dall'alto verso il basso, rappresentano la conversione
- si ricompone il numero, allineandolo nella maschera di bit a disposizione
- se il numero era negativo, si sostituisce il primo bit (quello più a sinistra) con 1, altrimenti si lascia a 0
Negli esempi che seguono supponiamo 1 bit segno, 8 bit parte intera, 7 bit parte frazionaria.
Esempio: -14,25
Escludo temporaneamente il segno e converto prima la parte intera:
14
10 = 1110
2
14:2=7 R=0 0
7:2=3 R=1 1
3:2=1 R=1 2
1:2=0 R=1 3
e poi la parte frazionaria:
0,25
10=0,01
2 (riempio il resto della parte frazionaria con 0).
0,25*2=0,5 U=0 -1
0,5 *2=1,0 U=1 -2
0 (termino conversione perché ho incontrato 0)
Risultato(valore assoluto): 14,25
10 =
1110,012
Infine estendo il numero (al numero di bit effettivo) e cambio il primo bit (segno):
Risultato(modulo/segno): -14,25
10 =
10001110,012
Esempio: -123,21
Escludo temporaneamente il segno e converto prima la parte intera:
123
10 = 1111011
2
e poi la parte frazionaria:
0,21
10=0,001101
2 (approssimato).
Risultato(valore assoluto): 123,21
10 =
1111011,0011012
Infine estendo il numero (al numero di bit effettivo) e cambio il primo bit (segno):
Risultato(modulo/segno): -123,21
10 =
11111011,0011012
Conversione in formato complemento a 2
Come per la conversione precedente, per questa conversione si procede convertendo il valore assoluto del numero (sia parte intera che parte frazionaria).
Fatto questo però, si esegue il NOT del numero e si somma 1 al bit meno significativo (che vale 1) della parte frazionaria, gestendo gli eventuali riporti.
Negli esempi che seguono supponiamo 1 bit segno, 8 bit parte intera, 7 bit parte frazionaria.
Esempio: -14,25
Escludo temporaneamente il segno e converto prima la parte intera:
14
10 = 1110
2
14:2=7 R=0 0
7:2=3 R=1 1
3:2=1 R=1 2
1:2=0 R=1 3
e poi la parte frazionaria:
0,25
10=0,01
2 (riempio il resto della parte frazionaria con 0).
0,25*2=0,5 U=0 -1
0,5 *2=1,0 U=1 -2
0 (termino conversione perché ho incontrato 0)
Risultato(valore assoluto): 14,25
10 =
1110,012
Infine estendo il numero (al numero di bit effettivo), ne eseguo il NOT e aggiungo 1 al bit meno significativo:
Risultato(complemento a 2): -14,25
10 = 11110001,10
2 + 00000000,01
2 =
11110001,112
La verifica che i due numeri opposti hanno somma 0 viene lasciata al lettore:
00001110,01
2 + 11110001,11
2 = ?
Esempio: -123,21
Escludo temporaneamente il segno e converto prima la parte intera:
123
10 = 1111011
2
e poi la parte frazionaria:
0,21
10=0,001101
2 (approssimato).
Risultato(valore assoluto): 123,21
10 =
1111011,0011012
Infine estendo il numero (al numero di bit effettivo), ne eseguo il NOT e aggiungo 1 al bit meno significativo:
a) Risultato(complemento a 2): -123,21
10 = 10000100,110010
2 + 00000000,000001
2 =
10000100,1100112
b) Risultato(complemento a 2): -123,21
10 = (-(123
10)) + (-(0,21
10)) = 10000101
2 + 11111111,110011
2 =
10000100,1100112