Préface : Dans cet article, nous expliquerons les types de données en langage C et comment elles sont stockées en mémoire.
1. Introduction aux types de données
Les types de données de base du langage C sont les suivants :
type de données de caractère char 1 octet
court entier court 2 octets
int entier 4 octets
long long entier 4/8 octets (32 bits/64 bits)
longlong Entier plus long 8 octets
float Type à virgule flottante simple précision 4 octets
double Type à virgule flottante double précision 8 octets
Alors pourquoi diviser autant de types de données ?
En effet, ils occupent différentes tailles de mémoire et les utilisent pour définir différents types de variables.
Lorsque nous écrivons du code, nous devons utiliser le moins d'espace mémoire possible pour faire des choses plus importantes , ce qui nous oblige à utiliser de manière flexible différents types de données dans la programmation.
Pour les sept types de données ci-dessus, nous divisons les cinq premiers et les deux derniers en deux familles :
1. Famille entière
Comme son nom l'indique, le type entier signifie que la variable définie est un entier, mais pourquoi char est-il ici un membre de la famille des types entiers ? N'est-ce pas un type de caractère défini ?
En fait, ce que le caractère stocke dans la mémoire est la valeur du code ASCII du caractère , et la valeur du code ASCII est un entier , donc le type de caractère est classé dans le type entier.
2. Famille à virgule flottante
Les nombres à virgule flottante sont aussi ce que nous appelons habituellement des décimales, par exemple : 3,14159, la raison pour laquelle on l'appelle nombre à virgule flottante est que sa virgule décimale peut flotter à gauche et à droite , comme écrire 0,314159 * 10, ou 31,4159/10. Puisqu’il n’existe aucune connaissance importante sur les nombres à virgule flottante, nous n’expliquerons pas grand-chose ici.
3. Type de construction
En plus des types entiers et à virgule flottante, il existe également un type de données que nous définissons nous-mêmes, appelé type structurel, comprenant les suivants :
type de tableau arr[]
Structure de type structure
type d'énumération énumération
Union de type syndicat
4. Type de pointeur
int *pi Pointeur entier
char * pointeur de caractère pc
float *pf pointeur à virgule flottante
void *pv pointeur vide
5. Type vide
void représente un type vide (pas de type)
Habituellement utilisé pour les types de retour de fonctions, les paramètres de fonctions et les types de pointeurs.
Dans ce qui suit, nous n'expliquerons que le type entier. Les quatre derniers types ne sont pas au centre de notre explication dans cet article, donc ici uniquement à des fins d'affichage, et nous ne développerons pas l'explication. Les amis ont juste besoin de comprendre.
2. Stockage des entiers en mémoire
Les ordinateurs peuvent traiter des données binaires, et les données entières et à virgule flottante sont également stockées sous forme binaire en mémoire.
Les entiers sont stockés en mémoire sous forme de séquences binaires en complément à deux.
1. Code original, code inverse, code complémentaire
Il existe trois formes binaires d'entiers, à savoir le code original, le code complémentaire et le code complémentaire .
Les trois méthodes de représentation ont toutes un bit de signe et un bit de valeur . Le bit de signe utilise "0" pour indiquer un positif et "1" pour indiquer un négatif .
Le code original, le code inverse et le code complémentaire d'un entier positif sont les mêmes .
Le complément à un de l'entier négatif est que le bit de signe du code d'origine reste inchangé, et le reste des chiffres est inversé petit à petit, et le code complémentaire est le code négatif +1.
L'explication détaillée est la suivante :
Regardons séparément la mémoire occupée par les deux nombres :
Le compilateur VS que nous utilisons ici convertit le binaire en hexadécimal et l'affiche en mémoire, mais nous constatons qu'ils sont dans l'ordre opposé au binaire ci-dessus, pourquoi ?
2. Introduction en gros et petit endian
Qu’est-ce que le grand et le petit endian ?
Les grandes et petites extrémités sont respectivement le stockage big-endian et le stockage small-endian .
Stockage big-endian : stockez les données sur l'octet de poids faible d' une donnéeet stockez les données sur l'octet de poids fort à l'adresse basse de la mémoire .
Stockage petit-boutiste : stockez les données sur l'octet de poids fort d' une donnéeet stockez les données sur l'octet de poids faible à l'adresse basse de la mémoire .
Les détails sont les suivants:
On peut voir à partir de cela que le compilateur VS que j'utilise est stocké dans l'ordre des octets petit-boutiste.
3. Résumé
On peut dire que l'entier est le type de données le plus simple. Voici juste une explication simple de ce que j'ai appris et maîtrisé. S'il y a des lacunes, vous êtes invités à les ajouter dans la zone de commentaires. J'aime l'article du blogueur. Don' N'oubliez pas d'appuyer trois fois sur un bouton, rendez-vous dans le prochain numéro !