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:
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 ~~