contente
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 int
o 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;
}
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.
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
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,
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