Je pense que le diagramme n'est pas un centaines pour cent correct.
Les flotteurs sont stockées dans la mémoire comme suit:
Ils sont décomposés en:
- signe
s
(indiquant si il est positif ou négatif) - 1 bits
- mantisse
m
(essentiellement les chiffres de votre numéro - 24 bits
- exposant
e
- 7 bits
Ensuite, vous pouvez écrire n'importe quel nombre x
comme s * m * 2^e
où ^
dénote l'exponentiation.
5.2 devrait être représenté comme suit:
0 10000001 01001100110011001100110
S E M
S=0
indique qu'il s'agit d'un nombre positif, c'est à dire s=+1
E
, doit être interprété en nombre non signé, représentant ainsi 129
. Notez que vous devez soustraire 127 de E
pour obtenir l'original de l'exposant e = E - 127 = 2
M
doivent être interprétées de la façon suivante: Elle est interprétée comme un numéro commençant par un 1
suivi d'un point (.
), puis de chiffres après le point. Les chiffres après .
sont ceux qui sont réellement codé en m
. Nous introduisons les poids pour chaque chiffre:
bits in M: 0 1 0 0 1 ...
weight: 0.5 0.25 0.125 0.0625 0.03125 ... (take the half of the previous in each step)
Maintenant vous résumer le poids où les bits correspondants sont fixés. Après vous avez fait cela, vous ajoutez 1
(en raison de la normalisation dans le standard IEEE, vous pouvez toujours ajouter 1 pour interpréter M
) et d'obtenir les originaux m
.
Maintenant, vous calculez x = s * m * 2^e
et obtenir votre numéro d'origine.
Donc, la seule chose qui reste est que dans la vraie mémoire, octets peuvent être dans l'ordre inverse. C'est pourquoi le nombre ne peut pas être stocké comme suit:
0 10000001 01001100110011001100110
S E M
mais plus dans l'autre sens (il suffit de prendre 8-bits des blocs et miroir de leur ordre)
01100110 01100110 10100110 01000000
MMMMMMMM MMMMMMMM EMMMMMMM SEEEEEEE