Langage C - la méthode de stockage du double et du float en mémoire

Cet article présente principalement la méthode de stockage des types de données doubles et float en langage C

Introduction aux méthodes de stockage double et flottant

En termes de structure de stockage et d'algorithme, double et float sont identiques. La seule différence est que float est de 32 bits et double est de 64 bits, donc double peut stocker une plus grande précision.

Toutes les données sont stockées dans l'ordre binaire (0 ou 1) en mémoire, chaque 1 ou 0 est appelé 1 bit et un octet sur le processeur x86 est de 8 bits.

Par exemple, la valeur d'une variable int courte de 16 bits (2 octets) est 1 000, alors son expression binaire est : 00000011 11101000.

En raison de l'architecture du processeur Intel, il est stocké dans l'ordre inverse des octets, il devrait donc ressembler à ceci : 11101000 00000011, qui est la structure du nombre à virgule fixe 1000 en mémoire.

Voici les spécifications spécifiques :
La méthode de stockage du float en mémoire :
float occupe 4 octets (32 bits) en mémoire, 32 bits = bit de signe (1 bit) + bit d'exposant (8 bits) + chiffre de base (23 bits)

insérer la description de l'image ici

Comment le double est stocké en mémoire :

taper signe peu code exposant mantisse longueur
flotter 1 8 23 32
double 1 11 52 64

Comment le stocker ?

À l'heure actuelle, la norme du compilateur C/C++ suit la notation des nombres à virgule flottante formulée par l'IEEE pour effectuer des opérations flottantes et doubles.

Cette structure est une sorte de notation scientifique, représentée par des symboles, des exposants et des mantisses, et la base est définie sur 2, c'est-à-dire qu'un nombre à virgule flottante est exprimé par la mantisse multipliée par 2 à la puissance de l'exposant. puis un signe est ajouté.

La simple précision et la double précision sont divisées en trois parties lors du stockage :

  1. Bit de signe (Sign) : 0 signifie positif, 1 signifie négatif
  2. Exposant (Exponent) : utilisé pour stocker la notation scientifique 指数数据et adopté 移位存储. Il peut être 阶码plus précis de l'appeler et de l'oublier après avoir appris les principes informatiques. 127 et 1023 doivent considérer le signe de l’exposant.
  3. partie mantisse (Mantissa) : la partie mantisse

Regardez d'abord le type float (prenez 2,25 comme exemple)

  • Étape 1 : La valeur du bit de signe (représentant 1 bit)

Il est facile de voir que ce nombre est positif, donc le bit de signe est 0.

  • Étape 2 : La valeur de l'exposant (8 bits)

    • La première étape : convertissez d'abord le nombre décimal 2,25 en binaire 0010,01 ;

    • Étape 2 : Exprimez 10,01 en notation scientifique binaire sous la forme 1,001 ;

    • Étape 3 : Écrivez la valeur obtenue à la deuxième étape sous forme exponentielle 1,001*(2^1) ;

    • Étape 4 : Convertissez la valeur de l'exposant 1+127=128, convertissez 128 sous forme binaire (1000 0000) et écrivez-la dans l'exposant.

  • Étape 3 : La valeur de la partie mantisse (représentant 23 bits)

  • Écrivez le nombre 1,001 obtenu à la deuxième étape de l'étape 2 et le nombre à trois chiffres 001 après la virgule décimale jusqu'à l'exposant, et remplissez les chiffres restants avec 0.

Ainsi, la représentation du nombre à virgule flottante simple précision 2,25 en mémoire est :

0 1000 0000 00100000000000000000000


Regardez à nouveau le type double (prenez 2,25 comme exemple)

  • Étape 1 : La valeur du bit de signe (représentant 1 bit)

Il est facile de voir que ce nombre est positif, donc le bit de signe est 0.

  • Étape 2 : La valeur de l'exposant (11 bits)

    • La première étape : convertissez d'abord le nombre décimal 2,25 en binaire 0010,01 ;

    • Étape 2 : Exprimez 10,01 en notation scientifique binaire sous la forme 1,001 ;

    • Étape 3 : Écrivez la valeur obtenue à la deuxième étape sous forme exponentielle 1,001*(2^) ;

    • Étape 4 : Convertissez la valeur de l'exposant 1+1023=1024, convertissez 124 sous forme binaire (100 0000 0000) et écrivez-la dans l'exposant.

  • Étape 3 : La valeur de la partie mantisse (représentant 52 bits)

  • Écrivez le nombre 1,001 obtenu à la deuxième étape de l'étape 2 et le nombre à trois chiffres 001 après la virgule décimale jusqu'à l'exposant, et remplissez les chiffres restants avec 0.

Ainsi, la représentation du nombre à virgule flottante double précision 2,25 en mémoire est :
0 100 0000 0000 0010000000000000000000000000000000000000000000000000

Je suppose que tu aimes

Origine blog.csdn.net/baidu_33256174/article/details/130716263
conseillé
Classement