Almacenamiento de datos en lenguaje C activado

Almacenamiento de datos en lenguaje C activado

Debido al gran contenido, se divide en dos partes, el almacenamiento de datos: me apresuraré a salir lo antes posible. No importa si te gusta o no, solo espero que los lectores que lo vean puedan dedicar tus preciosos minutos a mirar los artículos que he escrito.

Primero introduzca cuáles son los tipos de datos

  1. Cirugía plástica
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. Clase de coma flotante
float
double
long double
  1. Tipo construido (tipo personalizado)
数组类型-例如arr[10]={
    
    0}
结构体类型-struct
枚举类型-enum
联合类型-union
  1. Tipo de puntero
int *pi;
char *pc;
short *ps;
float *pf;
void *pv;//空类型指针
  1. Tipo vacío
void表示空类型/无类型
通常应用于函数的返回类型、函数的参数、指针类型。

La importancia de crear estos tipos es:

  1. El uso de diferentes tipos determina el tamaño del espacio de memoria abierto (el tamaño del espacio determina el alcance de la aplicación)
  2. El tipo determina la perspectiva de mirar el espacio de la memoria.
    A continuación, expliquemos primero la forma de almacenamiento de la configuración en la memoria.
    Si desea crear una variable, debe abrir espacio en la memoria. El tamaño del espacio abierto está relacionado con el tipo. Entonces echemos un vistazo a la variable. ¿Cómo se almacena en la memoria?
比如
int a=20;
int b=-10;
我们已经知道a,b会占内存四字节的空间,那它们是如何存储的呢?

Primero entendamos los conceptos de código original, código inverso y código complementario.
Hay tres formas de representar el número con signo en la computadora, a saber, el código original, el código inverso y el código de complemento
. Hay dos partes del bit de signo y el bit de valor. El bit de signo usa 0 para indicar "positivo" y 1 para indicar "" Negativo ", y las tres representaciones de bits numéricos son diferentes.

  • Código original: traduce directamente el binario al binario en forma de números positivos y negativos.
  • Código invertido: el bit de signo del código original permanece sin cambios y los otros bits se pueden invertir secuencialmente.
  • Código de complemento: agregue uno al código inverso. Lo
    anterior es la forma de encontrar el complemento inverso original de un número negativo, y el complemento inverso original de un número positivo es el mismo.

Para dar forma: los datos almacenados en la memoria son en realidad el complemento

La razón es que

En los sistemas informáticos, los valores siempre se representan y almacenan en complementos. La razón es que el bit de signo y el campo de valor se pueden procesar de manera uniforme usando el código de complemento; al mismo tiempo, la suma y la resta también se pueden procesar de manera uniforme (la CPU solo tiene un sumador) .Además, el código de complemento y el el código original se convierte mutuamente y el proceso de operación es el mismo Circuito de hardware adicional.

Muestre un ejemplo de números positivos y negativos
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
Entonces surge otra pregunta de esto: ¿Por qué el orden de almacenamiento del complemento en la figura anterior es diferente al de la memoria?

A continuación, para explorar este tema, tomemos otra castaña: supongamos que ahora se almacena el número 0x 11 22 33 44 .
Inserte la descripción de la imagen aquí
Almacenamiento Big-endian : almacene el contenido del byte bajo de un dato (el primer tipo en la figura anterior) en la dirección alta; almacene el contenido del byte alto en la dirección baja.
Almacenamiento de orden de bytes Little-endian : almacena el contenido del byte bajo de un dato (el segundo tipo en la figura anterior) en la dirección baja; almacena el contenido del byte alto en la dirección alta.

Esto se debe a que en los sistemas informáticos utilizamos bytes como unidad, y cada unidad de dirección corresponde a un byte, y un byte tiene 8 bits. Pero en el lenguaje C, además del char de 8 bits, hay un tipo corto de 16 bits, un tipo largo de 32 bits (según el compilador específico) y para procesadores con más de 8 bits, como 16 -bit o 32 bits Debido a que el ancho del registro es mayor que un byte, debe haber un problema de cómo organizar varios bytes. Esto llevó al modelo de almacenamiento big-endian y al modelo de almacenamiento little-endian.
Por ejemplo, un tipo x corto de 16 bits, la dirección en la memoria es 0x0010 y el valor de x es 0x1122, entonces 0x11 es el byte alto y 0x22 es el byte bajo. Para el modo big-endian, coloque 0x11 en la dirección baja, es decir, 0x0010 y 0x22 en la dirección alta, es decir, 0x0011. El modo Little-endian es todo lo contrario. Nuestra estructura X86 de uso común es el modo little-endian, mientras que KEIL C51 es el modo big-endian. Muchos ARM y DSP están en modo little-endian. Algunos procesadores ARM también pueden elegir el modo big-endian o el modo little-endian por hardware.

Así que aquí hay una pequeña pregunta de programación: diseñe un programa para determinar si el modo de almacenamiento de la plataforma actual es big-endian o 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;
}

El almacenamiento de datos en lenguaje C: este es el final.
Espero que los grandes que lo han visto me muestren mucho.

Supongo que te gusta

Origin blog.csdn.net/weixin_53451597/article/details/114286073
Recomendado
Clasificación