armazenamento de dados

1. Armazenamento de forma na memória

Código original, código inverso, código complementar

Os inteiros são armazenados na memória na forma de complemento de dois.
Para inteiros com sinal, o bit mais alto do binário representa o bit de sinal, 0 representa um número positivo e 1 representa
a conversão entre o código original, o código inverso e o código complementar do número negativo.
inteiro positivo:
O original, o inverso e o complemento são os mesmos.
inteiro negativo:
O bit de sinal do código original permanece inalterado, os outros bits são invertidos para obter o código inverso e o
código inverso é adicionado por 1 para se tornar o código complementar.

2. Conversão de tipos

1. Conversão de tipo implícita

Qualquer coisa menor que into tipo deve ser convertida para o tipo quando a operação for executada int. Isso é chamado de promoção de inteiros
. Tipos que precisam ser convertidos
char
unsigned char
assinado char
short
unsigned short

No padrão da linguagem C, não há provisão paraCaracteresSe é um int assinado ou não assinado, depende inteiramente do seu compilador
quandoCaracteresQuando o tipo inteiro com sinal é, o intervalo do valor que ele representa é ==-128~127==
Quando é um tipo inteiro sem sinal, o intervalo do valor que ele representa é0~255
Este é o sinalCaracteresUm círculo formado entre -128~127, quando 127+1 se torna -128

curtoé um tipo assinado, ele ecurto não assinadoVeja o código abaixo para
ajudá-lo 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;
}

insira a descrição da imagem aqui

2. Conversão aritmética

Quando vários números são operados juntos, se os tipos desses números forem diferentes, eles precisam ser alterados para o mesmo tipo para operação, que é a conversão aritmética comum .
Esses tipos são classificados de alto a baixo
long double
double
float
unsigned long int
long int
unsigned
int

A conversão aritmética deve ser significativa. Quando a alta precisão é convertida em baixa precisão, alguns dados estarão ausentes.

3. Introdução e julgamento da ordem de bytes endian big e small

Nota: Armazenado em bytes
Armazenamento big-endian : os bits de baixa ordem dos dados existem no endereçoAltoonde os bits superiores dos dados são armazenados no endereçoBaixoO lugar.
Armazenamento de ordem de byte Little-endian : os bits de ordem inferior dos dados existem no endereçoBaixoonde os bits superiores dos dados são armazenados no endereçoAltoO lugar.
insira a descrição da imagem aqui
Programe sua implementação: determine qual método de armazenamento sua máquina está

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álise de armazenamento do tipo de ponto flutuante na memória

O armazenamento do tipo de ponto flutuante na memória é completamente diferente daquele do tipo inteiro.
Para um número de ponto flutuante de 32 bits, o primeiro bit representa o bit de sinal (representado por S) , os próximos 8 bits representam o bit expoente ( representado por E) e o resto Os bits de s representam bits significativos (representados por M)
S: 0 para números positivos, -1 para números negativos .
E: Expoente mais 127 bits = seu número de armazenamento, e esses 8 bits representam um número sem sinal
M: Seu intervalo está entre 1 e 2. Não é necessário armazenar 1 ao armazenar, e armazenar o número após o ponto decimal, por
insira a descrição da imagem aqui
exemplo :

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

Vamos dar uma olhada nos resultados da operação do computador,
insira a descrição da imagem aqui
acredito que todos deveriam entender!
Há vários pontos a serem observados aqui:
1. Quando E é todo 0, o bit expoente é 1-127 (1-1023 (isto é 64 bits)), e o bit significativo M não precisa adicionar 1, este Um número muito próximo de ±0.
2. Quando E é todo 1, este é um número muito grande, ± infinito.
Além desses dois pontos de atenção, como guardar, como tirar.
Para um tipo de ponto flutuante de 64 bits, os 11 bits após o bit de sinal representam o bit expoente, mais1023, o restante é semelhante à descrição do tipo de ponto flutuante de 32 bits.

Bem-estar: Bispo você estuda

saia de pinguim:720429262

Acho que você gosta

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