Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
c:tipos_de_dados [2023/08/03 16:40] mazieroc:tipos_de_dados [2023/08/03 16:41] (atual) – [Tipos reais] maziero
Linha 1: Linha 1:
 +====== Tipos de dados ======
 +
 +Em C, as variáveis são estaticamente tipadas, ou seja, têm seu tipo pré-definido no código. Em princípio o tipo de uma variável não pode ser mudado (embora isso possa ser contornado através de operações especiais como o //type casting//).
 +
 +Os principais tipos de dados em C são:
 +
 +  * Tipos escalares
 +    * Tipos aritméticos
 +      * Inteiros
 +      * Reais
 +      * Complexos (C99)
 +    * [[Ponteiros]]
 +  * Tipos não-escalares
 +    * Arranjos ([[vetores|vetores e matrizes]])
 +    * [[Estruturas]]
 +    * [[Uniões]]
 +
 +===== Tipos inteiros =====
 +
 +Os tipos inteiros básicos no padrão C99 em máquinas de 32 bits e 64 bits são:
 +
 +^  Tipo  ^  Tamanho (32 bits)  ^  Faixa (32 bits)  ^  Tamanho (64 bits)  ^  Faixa (64 bits)  ^
 +| ''char'' |  1 byte  |  -128 a +127 ou\\ 0 a 255  |  idem  |  idem  |
 +| ''unsigned char'' |  1 byte  |  0 a 255  |  idem  |  idem  |
 +| ''signed char'' |  1 byte  |  -128 a +127  |  idem  |  idem  |
 +| ''short'' (ou ''signed short'') |  2 bytes  |  -32.768 a +32.767  |  idem  |  idem  |
 +| ''unsigned short'' |  2 bytes  |  0 a 65.535  |  idem  |  idem  |
 +| ''int'' (ou ''signed int'') |  4 bytes  |  -2<sup>31</sup> a +2<sup>31</sup> - 1  |  idem  |  idem  |
 +| ''unsigned int'' |  4 bytes  |  0 a 2<sup>32</sup> - 1  |  idem  |  idem  |
 +| ''long'' (ou ''signed long'') |  4 bytes  |  -2<sup>31</sup> a +2<sup>31</sup> - 1  |  8 bytes  |  -2<sup>63</sup> a +2<sup>63</sup> - 1  |
 +| ''unsigned long'' |  4 bytes  |  0 a 2<sup>32</sup> - 1  |  8 bytes  |  0 ... 2<sup>64</sup> - 1  |
 +| ''long long'' (ou ''signed long long'') |  8 bytes  |  -2<sup>63</sup> a +2<sup>63</sup> - 1  |  idem  |  idem  |
 +| ''unsigned long long'' |  8 bytes  |  0 a 2<sup>64</sup> - 1  |  idem  |  idem  |
 +| ''*'' e ''&'' (endereços) |  4 bytes  |  -  |  8 bytes  |  -  |
 +
 +<note tip>
 +O arquivo ''limits.h'' define constantes para os limites de valores aceitos dos tipos inteiros, como ''INT_MIN'', ''LONG_MAX'', etc. No Linux, esse arquivo se encontra em ''/usr/include/limits.h''.
 +</note>
 +
 +Como alguns tipos inteiros básicos dependem da implementação do compilador ou da plataforma de execução (16, 32 ou 64 bits), o padrão C99 trouxe definições de tipos inteiros **de tamanho fixo** (encontradas no arquivo ''inttypes.h''), como ''int8_t'' (inteiro de 8 bits com sinal), ''uint32_t'' (inteiro de 32 bits sem sinal), etc.
 +
 +Mais informações sobre tipos de dados em C podem ser encontradas [[https://en.wikipedia.org/wiki/C_data_types|nesta página]].
 +
 +===== Tipos reais =====
 +
 +Os tipos reais (de ponto flutuante) básicos são:
 +
 +^ Tipo ^ Tamanho (bytes) ^ Faixa de valores ^ Precisão ^
 +| ''float'' | 4 bytes | ±1.2×10<sup>-38</sup> a ±3.4×10<sup>+38</sup> | 6 dígitos |
 +| ''double'' | 8 bytes | ±2.3×10<sup>-308</sup> a ±1.7×10<sup>+308</sup> | 15 dígitos |
 +| ''long double'' | 10 bytes | ±3.4×10<sup>-4932</sup> a ±1.1×10<sup>+4932</sup> | 19 dígitos | 
 +
 +===== Tipo booleano =====
 +
 +A especificação C ANSI original **não possui** um tipo booleano. Em seu lugar, toda variável ou expressão cujo resultado seja zero (ou nulo) é avaliada como FALSA; caso o resultado seja diferente de zero (ou não-nulo), a variável ou expressão é considerada VERDADEIRA (inclusive valores negativos).
 +
 +<note tip>
 +A especificação C99 trouxe um tipo booleano (''bool''), acessível através do arquivo ''stdbool.h''
 +</note>
 +
 +===== O Tipo void =====
 +
 +A palavra reservada ''void'' designa um valor ou variável de tipo desconhecido. Esse tipo é usado em algumas situações especiais que serão vistas posteriormente, como ponteiros para variáveis cujo tipo é desconhecido a priori ou para indicar que uma função não retorna nenhum valor válido.
 +