Stockage des entiers et des nombres à virgule flottante en mémoire

 

Créez une variable, le système ouvrira automatiquement un espace pour celle-ci dans la mémoire, la taille de l'espace varie en fonction du type. Alors, comment les données stockées dans l'espace mémoire sont-elles ouvertes?


1. Le stockage de la mise en forme en mémoire

1. Le complément du code d'origine et du code inverse

1.1 Concept

Code original: une suite binaire de nombres

Code inverse: le bit de signe reste inchangé et le code d'origine est inversé bit par bit (bit de signe: 0 signifie nombre positif, 1 signifie nombre négatif)

Complément: le complément à un plus un

Exemple: Le complément du code original de 10 est le suivant:

1.2 Dans le système informatique, afin de simplifier le matériel , la valeur est toujours stockée sous forme de complément (représenté en hexadécimal)

①Le bit de signe et le champ de valeur peuvent être traités de manière uniforme;

②L'addition et la soustraction peuvent également être traitées de manière unifiée (le processeur n'a qu'un processeur d'addition)

③Conversion automatique entre le code complémentaire et le code d'origine, le processus de fonctionnement est le même.

           Inverser le code d'origine + 1-> code complémentaire 

           Complément inversé + 1-> code d'origine

2. Endianité

Dans les systèmes informatiques, nous sommes en octets de chaque adresse correspond à une unité d'octet, un octet de 8 bits . Mais dans le langage C, en plus du caractère 8 bits, il existe un type court 16 bits, un type long 32 bits (selon le compilateur spécifique), et pour les processeurs de plus de 8 bits, tels que 16 bits ou 32 bits Parce que le la largeur du registre est supérieure à un octet, il doit y avoir un problème de disposition de plusieurs octets. Cela a conduit au modèle de stockage big-endian et au modèle de stockage little-endian.

Le contenu réel de la mémoire est exprimé en hexadécimal. Un hexadécimal correspond à 4 bits et deux hexadécimaux à 8 bits, soit exactement un octet.

2.1 Ordre des octets de Little Endian : l'ordre supérieur est placé à l'adresse haute (petit, statut, adresse basse, petite extrémité)

2.2 Ordre des octets big-endian : le bit haut est placé à l'adresse basse

 

L'endianness d'une machine dépend du CPU, et les deux machines endianness existent, mais la machine little-endian est le courant dominant sur le PC ~

Deuxièmement, le stockage des nombres à virgule flottante en mémoire

About int occupe quelques octets en mémoire: il est lié au système.

Concernant le nombre d'octets qui flottent et occupent en double en mémoire: la norme IEEE 754 spécifie comment les nombres à virgule flottante sont stockés

1. flotteur

(Modèle de stockage de nombres à virgule flottante simple précision)

2. double

(Modèle de stockage de nombres à virgule flottante à double précision)

3. Comparez Float et Double

Dans la figure ci-dessus, S est le bit de signe (0 signifie positif +, 1 signifie négatif -), E partie exposant, M chiffres significatifs

lequel est:+/- M * 2 ^ E

Plus il y a de bits occupés par M, plus la précision des données est élevée; plus il y a de bits occupés par E, plus la plage de données est grande.

La précision et la plage du double sont plus grandes que le flotteur , le double est préféré dans le développement réel

Lorsque des nombres à virgule flottante sont stockés en mémoire, il y a souvent des erreurs. Dans le développement réel, vous ne pouvez pas utiliser la comparaison == entre des nombres à virgule flottante; si vous devez déterminer que les nombres à virgule flottante sont égaux, vous devez faire une différence, puis voir si la différence est une valeur inférieure à la valeur attendue Erreur. Si l'erreur répond à nos exigences, elle peut être considérée à peu près comme égale.

Lorsqu'une précision absolue est requise, évitez d'utiliser double et float ~~

 

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43939602/article/details/109675157
conseillé
Classement