almacenamiento de datos

1. Forma de almacenamiento en la memoria

Código original, código inverso, código complemento

Los números enteros se almacenan en la memoria en forma de complemento a dos.
Para enteros con signo, el bit más alto del binario representa el bit de signo, 0 representa un número positivo y 1 representa
la conversión entre el código original, el código inverso y el código complementario del número negativo.
entero positivo:
El original, el reverso y el complemento son lo mismo.
entero negativo:
El bit de signo del código original permanece sin cambios, los otros bits se invierten para obtener el código inverso, y el
código inverso se suma en 1 para convertirse en el código complementario.

2. Tipo de conversión

1. Conversión de tipos implícita

Cualquier valor inferior intal tipo debe convertirse al tipo cuando se realiza la operación int. Esto se llama promoción de enteros
Tipos que necesitan ser convertidos
char
sin firmar char
firmado char
corto
sin firmar corto

En el estándar del lenguaje C, no hay provisión paracarbonizarseSi se trata de un int firmado o no firmado, depende totalmente de su compilador
cuandocarbonizarseCuando el tipo entero con signo es, el rango del valor que representa es ==-128~127==
Cuando es un tipo entero sin signo, el rango del valor que representa es0~255
esta es la señalcarbonizarseSe forma un círculo entre -128~127, cuando 127+1 se convierte en -128

pequeñoes un tipo firmado, ycorto sin firmarMira el siguiente código para
ayudarte a entender

int main()
{
    
    
	char a = 0xb2;
	整型提升为0xffffffb2
	short b = 0xb200;
	整型提升为0xffffb200
	int c = 0xb2000000;
	不需要提升
	if (a == 0xb2)
		printf("a\n");
	if (b == 0xb200)
		printf("b\n");
	if (c == 0xb2000000)
		printf("c\n");
	return 0;
}

inserte la descripción de la imagen aquí

2. Conversión aritmética

Cuando se operan varios números juntos, si los tipos de estos números son diferentes, deben cambiarse al mismo tipo para la operación, que es la conversión aritmética común .
Estos tipos se ordenan de mayor a menor
long double
double
float
unsigned long int
long int
unsigned int
int

La conversión aritmética debe ser significativa. Cuando la alta precisión se convierte en baja precisión, faltarán algunos datos.

3. Introducción y juicio del orden de bytes big y small endian

Nota: Almacenado en bytes
Almacenamiento big-endian : los bits de orden inferior de los datos existen en la direcciónelevadodonde los bits superiores de los datos se almacenan en la direcciónBajoEl lugar
Almacenamiento de orden de bytes Little-endian : los bits de orden inferior de los datos existen en la direcciónBajodonde los bits superiores de los datos se almacenan en la direcciónelevadoEl lugar.
inserte la descripción de la imagen aquí
Programe su implementación: determine qué método de almacenamiento es su máquina

int panduan()
{
    
    
    int i = 1;
    return *(char*)&i;
}
int main()
{
    
    
    int ret=panduan();
    if (ret == 1)
        printf("小端\n");
    else
        printf("大端\n");
    return 0;
}

4. Análisis de almacenamiento de tipo punto flotante en memoria

El almacenamiento del tipo de punto flotante en la memoria es completamente diferente al del tipo entero.
Para un número de punto flotante de 32 bits, el primer bit representa el bit de signo (representado por S) , los siguientes 8 bits representan el bit de exponente ( representado por E) , y el resto Los bits de s representan bits significativos (representados por M)
S: 0 para números positivos, -1 para números negativos .
E: Exponente más 127 bits = su número de almacenamiento, y estos 8 bits representan un número sin signo
M: Su rango es entre 1 y 2. No es necesario almacenar 1 al almacenar, y almacenar el número después del punto decimal, por
inserte la descripción de la imagen aquí
ejemplo :

	float i=6.5;
	二进制为110.1   1.101 *2^2
	s为0
	E为2+127=129
	M为101   后面位用0进行填充
	0 10000001 10100000000000000000000
	16进制进行表示
	0x40d00000

Echemos un vistazo a los resultados de la operación de la computadora, ¡
inserte la descripción de la imagen aquí
creo que todos deberían entenderlo!
Hay varios puntos a tener en cuenta aquí:
1. Cuando E es todo 0, el bit de exponente es 1-127 (1-1023 (esto es de 64 bits)), y el bit significativo M no necesita sumar 1, este Un número muy cercano a ±0.
2. Cuando E es todo 1, este es un número muy grande, ±infinito.
Además de estos dos puntos de atención, cómo guardarlo, cómo sacarlo.
Para un tipo de coma flotante de 64 bits, los 11 bits después del bit de signo representan el bit de exponente, más1023, el resto es similar a la descripción del tipo de coma flotante de 32 bits.

Bienestar: Obispo estudias

falda pinguino:720429262

Supongo que te gusta

Origin blog.csdn.net/m0_60598323/article/details/123146769
Recomendado
Clasificación