Stockage de données en langage C

Stockage de données en langage C

En raison du contenu volumineux, il est divisé en deux parties, le stockage des données - je me précipiterai dès que possible. Peu importe que cela vous plaise ou non, j'espère juste que les lecteurs qui le verront pourront passer vos précieuses minutes à regarder les articles que j'ai écrits.

Présentez d'abord quels sont les types de données

  1. Chirurgie plastique
char//其在内存中以ASCII码的形式存储,ASCII码为整数,所以归为整形类
	signed char//有符号
	unsigned char//无符号
short
	signed short
	unsigned short
int 
	signed int
	unsigned int
long
	signed long
	unsigned long
long long
	signed long long
	unsigned long long
//仅写出char/short/int/long/long long时通常都会被理解为有符号型
  1. Classe à virgule flottante
float
double
long double
  1. Type construit (type personnalisé)
数组类型-例如arr[10]={
    
    0}
结构体类型-struct
枚举类型-enum
联合类型-union
  1. Type de pointeur
int *pi;
char *pc;
short *ps;
float *pf;
void *pv;//空类型指针
  1. Type vide
void表示空类型/无类型
通常应用于函数的返回类型、函数的参数、指针类型。

L'importance de la création de ces types est:

  1. L'utilisation de différents types détermine la taille de l'espace mémoire ouvert (la taille de l'espace détermine le champ d'application)
  2. Le type détermine la perspective d’observation de l’espace mémoire.
    Ensuite, expliquons tout d’abord la forme de stockage de la mise en forme dans la mémoire.
    Si vous voulez créer une variable, vous devez libérer de l’espace dans la mémoire. La taille de l’espace ouvert est liée au type. Alors jetons un œil à la variable. Comment est-elle stockée en mémoire.
比如
int a=20;
int b=-10;
我们已经知道a,b会占内存四字节的空间,那它们是如何存储的呢?

Comprenons d'abord les concepts de code original, de code inverse et de code complémentaire.
Il existe trois façons de représenter le nombre signé dans l'ordinateur, à savoir le code d'origine, le code inverse et le code de complément
. Il y a deux parties du bit de signe et du bit de valeur. Le bit de signe utilise 0 pour indiquer "positif" et 1 pour indiquer "" Négatif ", et les trois représentations de bits numériques sont différentes.

  • Code original: traduisez directement le binaire en binaire sous forme de nombres positifs et négatifs
  • Code inversé: le bit de signe du code d'origine reste inchangé et les autres bits peuvent être inversés séquentiellement.
  • Code complémentaire: ajoutez un au code inverse. Ce qui
    précède est le moyen de trouver le complément inverse d'origine d'un nombre négatif, et le complément inverse d'origine d'un nombre positif est le même.

Pour la mise en forme: les données stockées dans la mémoire sont en fait le complément

La raison en est que

Dans les systèmes informatiques, les valeurs sont toujours représentées et stockées dans des compléments. La raison en est que le bit de signe et le champ de valeur peuvent être traités de manière uniforme à l'aide du code de complément; en même temps, l'addition et la soustraction peuvent également être traitées de manière uniforme (le processeur n'a qu'un additionneur). De plus, le code de complément et le les codes d'origine sont convertis mutuellement et le processus de fonctionnement est le même Circuit matériel supplémentaire.

Montrez un exemple de nombres positifs et négatifs
Insérez la description de l'image ici

Insérez la description de l'image ici
Une autre question se pose alors: pourquoi l'ordre de stockage du complément dans la figure ci-dessus est-il différent de celui de la mémoire?

Ensuite, pour explorer ce problème, prenons un autre châtaigne. Supposons comment stocker le numéro 0x 11 22 33 44 maintenant?
Insérez la description de l'image ici
Stockage Big-endian : stockez le contenu de l'octet bas d'une donnée (le premier type dans la figure ci-dessus) à l'adresse haute; stockez le contenu de l'octet haut à l'adresse basse.
Stockage d'ordre d'octet petit-boutiste : stockez le contenu de l'octet bas d'une donnée (le deuxième type dans la figure ci-dessus) à l'adresse basse; stockez le contenu de l'octet haut à l'adresse haute.

En effet, dans les systèmes informatiques, nous utilisons des octets comme unité, et chaque unité d'adresse correspond à un octet et un octet équivaut à 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 avec plus de 8 bits bits, tels que 16 -bit ou 32 bits Étant donné que la largeur du registre est supérieure à un octet, il doit y avoir un problème sur la façon d'organiser plusieurs octets. Cela a conduit au modèle de stockage big-endian et au modèle de stockage little-endian.
Par exemple, un type court de 16 bits x, l'adresse dans la mémoire est 0x0010 et la valeur de x est 0x1122, puis 0x11 est l'octet haut et 0x22 est l'octet bas. Pour le mode big-endian, mettez 0x11 dans l'adresse basse, c'est-à-dire 0x0010 et 0x22 dans l'adresse haute, c'est-à-dire 0x0011. Le mode petit-boutiste est exactement le contraire. Notre structure X86 couramment utilisée est le mode little-endian, tandis que KEIL C51 est le mode big-endian. De nombreux ARM et DSP sont en mode petit-boutiste. Certains processeurs ARM peuvent également choisir le mode big-endian ou le mode little-endian par matériel.

Voici donc une petite question de programmation: veuillez concevoir un programme pour déterminer si le mode de stockage de la plate-forme actuelle est big-endian ou little-endian?

#include <stdio.h>
int check()
{
    
    
	int a = 1;
	return *(char*)&a;//先将int类型的指针强制转化为char,再解引用传回a中第一个字节数据
}
//上面拆开写就是这种
//int check()
//{
    
    
//	int a = 1;
//	char *p = (char*)&a;
//	return *p;
//}
int main()
{
    
    
	int a = 1;
	if (check() == 1)//如果返回的是1,就证明低位字节在低地址上
	{
    
    
		printf("小端\n");
	}
	else//如果返回的是0,就证明低位字节在高地址上
	{
    
    
		printf("大端\n");
	}
	return 0;
}

Le stockage des données en langage C - c'est la fin.
J'espère que les grands qui l'ont vu me montreront beaucoup de choses.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_53451597/article/details/114286073
conseillé
Classement