qotd
© 2014-2026 Roberto Foschini All rights reserved

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:

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: 1410 = 11102
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,2510=0,012 (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,2510 = 1110,012
Infine estendo il numero (al numero di bit effettivo) e cambio il primo bit (segno):
Risultato(modulo/segno): -14,2510 = 10001110,012

Esempio: -123,21

Escludo temporaneamente il segno e converto prima la parte intera: 12310 = 11110112 e poi la parte frazionaria: 0,2110=0,0011012 (approssimato).
Risultato(valore assoluto): 123,2110 = 1111011,0011012
Infine estendo il numero (al numero di bit effettivo) e cambio il primo bit (segno):
Risultato(modulo/segno): -123,2110 = 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: 1410 = 11102
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,2510=0,012 (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,2510 = 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,2510 = 11110001,102 + 00000000,012 = 11110001,112
La verifica che i due numeri opposti hanno somma 0 viene lasciata al lettore: 00001110,012 + 11110001,112 = ?

Esempio: -123,21

Escludo temporaneamente il segno e converto prima la parte intera: 12310 = 11110112 e poi la parte frazionaria: 0,2110=0,0011012 (approssimato).
Risultato(valore assoluto): 123,2110 = 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,2110 = 10000100,1100102 + 00000000,0000012 = 10000100,1100112
b) Risultato(complemento a 2): -123,2110 = (-(12310)) + (-(0,2110)) = 100001012 + 11111111,1100112 = 10000100,1100112