Gama de tipos numéricos em C ++
Pode parecer estranho, mas padrão do C ++ não diz exatamente como um grande número de cada um dos tipos de dados podem acomodar. O padrão de fala apenas para o tamanho relativo de cada tipo de dados. Por exemplo, ele diz que o máximo long int é pelo menos tão grande como a máxima int.
Os autores do C ++ não estavam tentando ser misterioso. Eles simplesmente queriam permitir que o compilador para implementar o código mais rápido absoluta possível para a máquina base. O padrão foi projetado para funcionar para todos os diferentes tipos de processadores que executam sistemas operacionais diferentes.
No entanto, é útil saber os limites para a sua implementação em particular. A tabela mostra o tamanho de cada tipo de número em um PC com Windows usando o compilador / gcc Code :: Blocks.
Variável | Tamanho (bytes) | Precisão | Alcance |
---|---|---|---|
baixo | 2 | exato | -32.768-32.767 |
int | 4 | exato | 2,147,483,648 a 2.147.483.647 |
longo | 4 | exato | -2,147,483,648 a 2.147.483.647 |
int long long | 8 | exato | -9.223.372.036.854.775.808 para 9.223.372.036.854.775.807 |
flutuador | 4 | 7 dígitos | ± 3.4028 x 10 ±38 |
longo | 8 | 16 dígitos | ± 1.7977 x 10 ±308 |
long double | 12 | 19 dígitos | ± 1.1897 x 10 ±4932 |
A tentativa de calcular um número que é além do alcance de seu tipo é conhecido como um transbordar. O padrão C ++ geralmente deixa os resultados de um estouro como indefinido. Essa é outra maneira que os definidores de C ++ permaneceu flexível.
No PC, um ponto flutuante estouro resulta em uma exceção, que se não for tratada fará com que o programa deixe de funcionar. Tão ruim quanto isso soa, um integer overflow é pior - C ++ silenciosamente gera um valor incorreto sem reclamar.