当前位置:网站首页>C | les données entières sont stockées en mémoire sous forme et en taille

C | les données entières sont stockées en mémoire sous forme et en taille

2021-10-14 06:30:03 Ersansui

Préface

La lune brillante en mer est pleine de marée,
Des milliers de kilomètres d'amour avec les nuages.
Envoyer des bénédictions à distance,
Se transformer en brise printanière dans un rêve.

La lune est ronde et ronde,Chaque famille est heureuse.

Festival de mi - automne,Joyeux Noël à tous、Heureux et heureux!

Retour au sujet,ApprendreCQuand la langue est programmée,Nous savons tous qu'il existe de nombreux types de données communs,Et les types numériques communs sont divisés en deux catégories:Entier et flottant.Sur ces deux types de données,Le format de stockage en mémoire est différent.Aujourd'hui, nous nous concentrons sur la façon dont les données entières sont stockées en mémoire.


Forme de stockage des données entières

Stockage de données entières,Une famille entière,Cela inclut les types de caractères、Forme courte、Taille、Forme longue, etc..

Les données de type caractère sont stockées,Ça correspondrait à un caractèreASCIIValeur du Code à stocker.

Pour en savoir plus sur le stockage de données entières en mémoire,Nous devons comprendre trois noms:Code source、Code inverse、Complément.

Et toutes les données entières,Stockage en mémoire,Tout est stocké sous forme de complément.

Code source:Il suffit de traduire les données originales en binaires sous forme de nombres positifs et négatifs.

Code inverse:Modifie le BIT de symbole du code source,Les autres bits sont inversés dans l'ordre.

Complément:Code inverse+1J'ai un complément.

(Supplément:La forme positive et négative d'un entier signifie que le BIT le plus élevé est un bit symbolique,Les autres bits sont utilisés pour représenter les valeurs numériques.Le BIT du symbole est1Indique un nombre négatif,Le BIT du symbole est0Représente un entier)

Pourquoi conserver sous forme de complément ?

La raison en est que,Utiliser un complément,Les bits symboliques et les champs numériques peuvent être traités uniformément;

En même temps,L'addition et la soustraction peuvent également être traitées uniformément(CPUAdder seulement)En outre,Conversion mutuelle du complément et du code source,Le processus de calcul est le même,Aucun circuit matériel supplémentaire n'est nécessaire.

Nous pouvons voir comment les données entières sont stockées en mémoire
Insérer la description de l'image ici
Ces données sont stockées sous forme de compléments hexadécimaux .


Stockage côté taille

Mais, Nous pouvons trouver les variables de l'image ci - dessus a Quelque chose ne va pas avec l'ordre de stockage de .

Pourquoi pas en hexadécimal 00 00 00 14 Pour stocker ,Mais...14 00 00 00Et alors??

Il s'agit du concept de stockage de taille .

Quelle grande extrémité petite extrémité :

Grande extrémité(Stockage)Mode,Le BIT inférieur des données est stocké dans une adresse mémoire élevée,Et le haut niveau des données,Enregistrer en mémoire à faible adresse;

Petit bout(Stockage)Mode,Le BIT inférieur des données est stocké dans une adresse mémoire basse,Et le haut niveau des données,,Enregistrer en mémoire à haute adresse.

Par exemple:Un 16bit De short Type x ,L'adresse en mémoire est 0x0010 , x La valeur de 0x1122 ,Alors 0x11 Est un octet élevé, 0x22 Faible octet.Pour le mode grand terminal,Juste... 0x11 Placer à basse adresse,C'est - à - dire: 0x0010 Moyenne, 0x22 Placer à haute adresse,C'est - à - dire: 0x0011 Moyenne.Mode petit terminal,Exactement le contraire..
Insérer la description de l'image ici

Pourquoi y a - t - il une différence de taille??
C'est parce que dans un système informatique,Nous sommes en octets,Chaque Unit é d'adresse correspond à un octet,Un octet est8 bit.Mais, Beaucoup de nos autres types de données sont plus grands qu'un octet , Il y a donc inévitablement un problème de programmation Multi - octets .

Comment juger la taille ?

Nous pouvons juger par le code suivant .

// Lecture du stockage de taille 
#include<stdio.h>
int main()
{
    
	int n = 1;
	char* p = 0;//Oui.n L'adresse de doit être convertie en char*, Comme ça, les pointeurs p Lorsqu'il n'est pas référencé, il n'y a accès qu'à n Premier octet de la variable 
	p = (char*)&n;

	if (1 == *p)
		printf("Petit bout\n");
	else
		printf("Grande extrémité\n");
	return 0;
}

C'est bon., Le contenu d'aujourd'hui est presque terminé ici .


Conclusion

Encore une fois, je vous souhaite un joyeux festival de mi - automne !

La création n'est pas facile , Pour l'amour de mon blog si diligent pour le festival de la mi - automne , Fais - moi plaisir 、 Faites un commentaire. , Si vous pouviez encore me donner un peu d'attention , C'est le plus grand soutien pour moi ~

Insérer la description de l'image ici

版权声明
本文为[Ersansui]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/10/20211013211538530P.html

随机推荐