当前位置:网站首页>C | forme de stockage des données flottantes

C | forme de stockage des données flottantes

2021-10-14 06:41:48 Ersansui

Préface

Nous le savons tous.,Les données sont nécessaires pour tous les aspects de la vie,Et les données sont essentiellement composées d'entiers et de décimales.

InCDans la langue,Le type de données correspondant à un entier est un entier,Le type de données correspondant à la décimale est flottant.

Et les données flottantes courantes incluent:

float
double
long double

La dernière fois que nous avons appris ensemble comment les données plastiques sont stockées en mémoire,Aujourd'hui, apprenons comment les données flottantes sont stockées en mémoire!


Prends une petite châtaigne.

Voyons d'abord un petit châtaignier.

int main()
{
    
int n = 9;
float *pFloat = (float *)&n;
printf("nLa valeur de:%d\n",n);
printf("*pFloatLa valeur de:%f\n",*pFloat);
*pFloat = 9.0;
printf("numLa valeur de:%d\n",n);
printf("*pFloatLa valeur de:%f\n",*pFloat);
return 0;
}

Est - ce que les gars savent ce qu'est le résultat de l'exécution du code ci - dessus?Si vous ne savez pas, réfléchissez d'abord,Fais - le toi - même.

Nous pouvons enfin voir,Les résultats sont les suivants::

nLa valeur de:9
*pFloatLa valeur de:0.000000
numLa valeur de:1091567616
*pFloatLa valeur de:9.000000

Pourquoi y a - t - il une telle différence ? Il est temps de comprendre comment les données flottantes sont stockées en mémoire .


Règles pour le stockage de données en virgule flottante

Normes internationalesIEEE(Institute of Electrical and Electronic Engineering) 754,N'importe quel nombre binaire de points flottantsVPeut être exprimé sous la forme suivante::

(-1)^S * M * 2^E
(-1)^sReprésente un bit de symbole,Quands=0,VEst un nombre positif;Quands=1,VEst négatif
MIndique un nombre valide,Supérieur ou égal à1,Moins de2
2^EReprésente un bit exponentiel

Insérer la description de l'image ici

Insérer la description de l'image ici

C'est la représentation des nombres flottants

IEEE 754Le règlement:

Pour32Nombre de points flottants de bits,Le plus élevé1Les bits sont des bits symboliquess,C'est parti.8Les bits sont des indicesE,Le reste23Bit est un nombre valideM.

Insérer la description de l'image ici

Pour64Nombre de points flottants de bits,Le plus élevé1Les bits sont des bits symboliquesS,C'est parti.11Les bits sont des indicesE,Le reste52Bit est un nombre valideM.
Insérer la description de l'image ici

En outre,IEEE 754Pour les chiffres validesMEt indexE,Il existe également des dispositions spéciales.

À propos deM:
Comme je l'ai dit, 1≤M<2 ,C'est - à - dire,MPeut être écrit comme 1.xxxxxx Forme,Parmi euxxxxxxxReprésente la partie décimale.

IEEE 754Le règlement,Enregistrer à l'intérieur de l'ordinateurMHeure,Par défaut, le premier chiffre de ce nombre est toujours1,Pour qu'il puisse être abandonné.,Enregistrer uniquement les suivantsxxxxxxSection.Comme la préservation1.01Quand,Enregistrer seulement01,Attendez la lecture.,Encore une fois.1Ajouter.L'objet de cette action,C'est une économie.1Nombre effectif de bits.Par32Exemple de nombre de points flottants,Laisse - le.MSeulement23Bits,Le premier1Après le départ,égal à peut être sauvegardé24Nombre effectif de bits.

À propos deE:
Dans le règlement ,E Est un entier non signé , Seuls les nombres non négatifs peuvent être représentés ,Ça veut dire,SiEBits8Bits, Bits de plage de valeurs qui peuvent être représentés 0À255;SiEBits11Bits, Peut être représenté comme un bit de plage 0À2047.

Mais,Dans la vie réelle, Les exposants de puissance dans le comptage scientifique peuvent également avoir une représentation négative ,AlorsIEEE 754Le règlement,En mémoireELa valeur réelle de doit être ajoutée à un nombre intermédiaire,Pour8BitwiseE,Ce nombre moyen est127;Pour11BitwiseE,Ce nombre moyen est1023.Cela garantitE Bit entier non signé .

Par exemple,,2^10DeE- Oui.10,Alors gardez - le.32Bit float,Doit être sauvegardé sous10+127=137,C'est - à - dire:10001001.

E Le stockage en mémoire est également divisé en trois situations :

EPas tout à fait.0 Ou pas tout à fait 1

À ce moment - là,,Le nombre de points flottants est représenté par les règles suivantes:,C'est - à - dire l'indiceEValeur calculée moins127(Ou1023),Obtenir la valeur réelle,Encore.
Nombre effectifMAjouter le premier1.

ETout est0

À ce moment - là,,Indice du nombre de points flottantsEégal à1-127(Ou1-1023)Est la valeur réelle, Nombre effectifMPlus de premier1,Mais revenir à0.xxxxxxLa décimale de.C'est pour montrer±0,Et près de0Un petit nombre.

ETout.1

À ce moment - là,,Si un nombre valideMTout est0,Représentation±Infini(Plus ou moins dépend du BIT de symboles).


Conclusion

Cette fois, partager , C'est fini ici !

La création n'est pas facile,Si tout le monde pense que c'est bien,,J'espère que ça ira.、Cache - toi.、Fais gaffe.~~

Votre soutien est ma plus grande motivation pour créer!!

En raison de mes capacités limitées,En cas d'erreur,J'espère que la correction!!

S'il y a une meilleure façon ou une meilleure idée,Les commentaires sont les bienvenus~
Insérer la description de l'image ici

版权声明
本文为[Ersansui]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/10/20211013211538513l.html

随机推荐