Compartilhamento de tecnologia

O princípio de cálculo do intervalo representado por variáveis ​​​​do tipo int

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Entenda

Insira a descrição da imagem aqui
Normalmente, a variável do tipo int ocupa 4 bytes, 1 byte tem 8 bits e cada bit tem dois estados: 0 e 1, então a variável do tipo int pode representar um total de 2 ^ 32 estados (ou seja, pode representar 2 ^ 8 valor dos dados).

2. Por que normalmente o intervalo de valores do tipo int inteiro é -2147483648 ~ 2147483647

Começa às 07:36
compreensão adicional
        perguntar: Dos dois vídeos acima, podemos saber que o intervalo de números inteiros positivos que podem ser representados pelo tipo int é 1 ~ 2 ^ 31 - 1. Se compararmos essa lógica com números inteiros negativos, então o intervalo de números inteiros que podem ser representados pelo tipo int não deve ser -2^31 + 1 ~ 2^31 -1? Como o valor 2^31 não pode ser obtido, por que -2^31 pode ser obtido?
        responder:Na ciência da computação, a representação inteira com sinal mais comumente usada érepresentação em complemento de dois . Este método não apenas resolve o problema de representação de números positivos e negativos, mas também simplifica as operações binárias de adição e subtração. Vamos dar uma olhada nesta representação em detalhes:
        1. Um número positivo : A representação binária de números positivos é igual aos números sem sinal. Por exemplo, a representação binária de 3 dígitos de 3 é 011.
        2. número negativo : A representação de números negativos é conseguida através do complemento de números positivos. O complemento de dois de um número negativo é calculado invertendo a representação binária do valor absoluto do número e adicionando 1. Por exemplo:
① Negação: primeiro inverta a representação binária de 3.011 em 100.
② Adicione 1: adicione 1 a 100 para obter 101, então a representação do complemento de dois de -3 é 101.
         Para uma variável inteira de 32 bits, seu bit mais alto (também chamado de bit de sinal) representa o sinal, 0 representa positivo e 1 representa negativo. Os 31 bits restantes são usados ​​para representar valores numéricos.A seguir, voltando à questão que acabamos de levantar:
        1. Faixa positiva (incluindo 0) : O bit de sinal é 0 e os 31 bits restantes podem representar valores de 000…000 (31 0s) a 011…111 (31 1s). O intervalo decimal correspondente é de 0 a 2^31 - 1.
        2. Faixa negativa : O bit de sinal é 1 e os 31 bits restantes podem representar valores de 100...000 (31 0s) a 111...111 (31 1s). Entre eles, o número em complemento de dois de 100...000 (31 zeros) representa -2^31, e o valor decimal correspondente é -2^31. O número em complemento de dois de 111...111 (31 unidades) representa -1, e o valor decimal correspondente é -1.
         Intervalo de números positivos: 1 ~ 2 ^ 31 - 0; intervalo de números negativos: -1 ~ -2 ^ 31, o número total ainda é 2 ^ 32 estados diferentes. Portanto, geralmente o intervalo de valores do tipo int inteiro é -2147483648 ~ 2147483647 (ou seja, -2 ^ 31 ~ 2 ^ 31 - 1)

3. Quantos bytes o tipo int ocupa?

Quantos bytes um int de 64 bits ocupa A diferença entre os tipos inteiros int, long e long long?
Quantos bytes o int de 64 bits ocupa?
A diferença entre máquinas de 32 e 64 bits e o número de bytes ocupados por tipos de dados básicos
Tipo inteiro da linguagem C (incluindo intervalo de valores e comprimento)
Quantos bytes o tipo int ocupa?
Tamanho de dados do tipo int e tipo de ponteiro em diferentes plataformas
Problema de sizeof() em Java
Variáveis ​​​​do tipo int em python podem armazenar inteiros de qualquer tamanho

Resumir:

  1. O tamanho do tipo de dados de C e C++ é afetado pelo padrão de compilação, compilador, número de bits do sistema operacional, etc.
  2. O tamanho do tipo de dados de Java e Python é determinado pela especificação da linguagem ou pela implementação do interpretador e não é afetado por fatores como o compilador e o número de bits do sistema operacional.
  3. A principal razão para essa diferença de design é que C e C++ são linguagens de programação de sistemas que geralmente precisam interagir diretamente com o hardware, portanto, o tamanho dos tipos de dados varia dependendo do ambiente subjacente, enquanto Java e Python são de alta qualidade; linguagens de programação de nível mais alto com um nível mais alto de abstração. O objetivo do design é a consistência entre plataformas.

4. Recomendo

Recomendado novamente
Parte Três: A Origem do Problema