Relação entre o comprimento de palavra, o tamanho dos caracteres, tamanho e número inteiro de bytes

StackOverflow https://stackoverflow.com/questions/698312

  •  22-08-2019
  •  | 
  •  

Pergunta

O que é a relação entre o comprimento da palavra, o tamanho dos caracteres, o tamanho inteiro, e byte em C ++?

Foi útil?

Solução

O padrão requer que certos tipos têm mínimo tamanhos (curta é pelo menos 16 bits, int é, pelo menos, 16 bits, etc.), e que alguns grupos de tipo estão ordenados (sizeof(int)> = sizeof(short) > = sizeof(char)).

Outras dicas

Em C ++ um char deve ser grande o suficiente para conter qualquer caractere no conjunto de caracteres básicos da Implementação.

int tem o "tamanho natural, sugerido pela arquitetura do ambiente de execução". Note que isto significa que um int não necessidade de ser pelo menos 32-bits de tamanho. Implementações onde int é de 16 bits são comuns (acha incorporado ot MS-DOS).

O seguinte são tomadas a partir de várias partes do C ++ 98 e padrões C99:

  • long int tem que ser pelo menos tão grande quanto int
  • int tem que ser pelo menos tão grande quanto short
  • short tem que ser pelo menos tão grande quanto char

Note que eles poderiam ser todos do mesmo tamanho.

Além disso (assumindo que a implementação de um de complemento de dois):

  • long int tem que ser pelo menos 32-bits
  • int tem que ser de pelo menos 16 bits
  • short tem que ser de pelo menos 16 bits
  • char tem que ser de pelo menos 8 bits

A Norma não sabem disso "palavra" coisinha usado por processadores. Mas ele diz que o tipo "int" deve ter o tamanho natural para um ambiente de execução. Mas, mesmo para 64 ambientes bit, int é geralmente apenas 32 bits. Assim, "palavra" em termos padrão tem praticamente nenhum significado comum (exceto para a "palavra" comum Inglês, claro).

tamanho dos caracteres é do tamanho de um personagem. Depende de qual personagem você falar. tipos de caracteres são char, unsigned char e assinado char. Também wchar_t é usado para armazenar os caracteres que podem ter qualquer tamanho (determinado pela implementação -., Mas deve usar um dos tipos inteiros como seu tipo subjacente Bem como as contagens), enquanto de char / char assinado ou de char não assinado tem que ter um byte. Isso significa que um byte tem tanta bits como um caractere tem. Se uma aplicação diz um objecto do tipo char tem 16 bits, então um byte tem 16 bits também.

Agora, um byte é o tamanho que um caractere ocupa. É uma unidade, e não algum tipo específico. Não há muito mais sobre ele, apenas que é a unidade que você pode acessar a memória. Ou seja você não tem acesso ponteiro para bit-campos, mas você tem acesso a unidades a partir de um byte.

"size Integer" agora é bastante ampla. O que você quer dizer? Todos bool, char, short, int, long e os seus homólogos unsinged são inteiros. Sua gama é o que eu chamaria de "tamanho inteiro" e que está documentado no padrão C - assumida pelo padrão C ++. Para caractere assinado o intervalo é de -127 <-> 127, para o short e int é o mesmo e é -2 ^ 15 + 1 <-> 2 ^ 15-1 e por muito tempo é -2 ^ 31 + 1 < -> 2 ^ 31-1. Os seus homólogos não assinados variar desde 0 até 2 ^ 8-1, 2 ^ 16-1 ^ 2 e 32-1, respectivamente. Esses são tamanhos no entanto mínimos. Ou seja, um int não pode ter tamanho máximo de 2 ^ 14 em qualquer plataforma, porque é inferior a 2 ^ 15-1 claro. Daqui resulta para os valores que é necessário um mínimo de bits. Para carvão que é 8, para curto / int que é 16 e por muito tempo que é 32. representação complemento de dois para números negativos não é necessário, e é por isso o valor negativo não é -128 em vez de -127 por exemplo para caractere assinado.

padrão C ++ não tem um tipo de dados chamado word ou byte. O resto está bem definida como gamas. A base é um char que tem de bits CHAR_BITS. O valor mais comumente usado de CHAR_BITS é 8.

sizeof (char) == 1 (um byte) (em C ++, em C - não especificada)
sizeof (int)> = sizeof (char)
palavra - não c ++ tipo, usualy em arquitetura de computadores que significa 2 bytes

Kind of depende do que você entende por relação. O tamanho de tipos numéricos é geralmente um múltiplo do tamanho de palavra máquina. Um byte é um byte é um byte - 8 bits, sem mais nem menos. Um personagem é definido na norma como um único byte sem sinal Eu acredito (verifique o ARM para mais detalhes).

A regra geral é, não fazer quaisquer suposições sobre o tamanho real de tipos de dados. As relações padrão especifica entre os tipos, tais como um "longo" número inteiro vai ser do mesmo tamanho ou maior do que um "int". implementações individuais do idioma irá escolher tamanhos específicos para os tipos que são convenientes para eles. Por exemplo, um compilador para um processador de 64 bits irá escolher diferentes tamanhos do que um compilador para um processador de 32 bits.

Você pode usar o operador sizeof () para examinar os tamanhos específicos para o compilador que você está usando (na arquitetura alvo específico).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top