Linguagem C: os tipos de dados

Dezembro 2017


Os dados manipulados em linguagem C são tipados, ou seja, para cada dado usado (nas variáveis, por exemplo) é preciso especificar o tipo de dado, o que permite conhecer a ocupação da memória (o número de bytes) dos dados, assim como a sua representação:

Números: inteiros (int) ou reais, ou seja, com vírgulas (float);
Ponteiros (pointers): usados para armazenar o endereço de outros dados, eles ‘apontam’ para outro dado.

Em C existem vários tipos inteiros, dependendo do número de bytes em que são codificados, bem como o seu formato, ou seja, se eles são assinados (com o sinal - ou +) ou não. Por padrão os dados são assinados.

Veja esta tabela com os tipos dados em linguagem C:


Tipo de dadoSignificadoTamanho (em bytes)Intervalo de valores aceitos
charCaractere1- de 128 a 127
unsigned charCaractere não assinado10 à 255
short intInteiro curto2-de 32 768 a 32 767
unsigned short intInteiro curto não assinado2de 0 a 65 535
intInteiro2 (no processador de 16 bits)
4 (no processador de 32 bits)
-de 32 768 a 32 767
- de 2 147 483 648 a 2147 483 647
unsigned intInteiro não assinado2 (no processador de 16 bits)
4 (no processador de 32 bits)
de 0 a 65 535
de 0 a 4 294 967 295
long intInteiro longo4-de 2 147 483 648 a 2 147 483 647
unsigned long intInteiro longo não assinado4de 0 a 4 294 967 295
floatFlutuante (real)43.4*10-38 à 3.4*1038
duploFlutuante duplo8de 1.7*10-308 a 1.7*10308
longo duploFlutuante duplo longo103.4*10-4932 à 3.4*104932

Número inteiro (int)

Um número inteiro é um número sem vírgula, que pode ser expresso em diferentes bases:


Base decimal: o número inteiro é representado por uma sequência de números unitários (de 0 a 9), que não deve começar por 0.

Base hexadecimal: o número inteiro é representado por uma sequência de números unitários (de 0 a 9 ou de A a F (ou de a a f)), começando por 0x ou 0X.

Base octal: o número inteiro é representado por uma sequência de números unitários (incluindo apenas números de 0 a 7), começando com 0.

Os inteiros são assinados por padrão, o que significa que eles têm um sinal. Para armazenar informações sobre o sinal (em binário), os computadores usam o complemento a dois.

Número com vírgula (float)

Um número com vírgula flutuante é um número com vírgula, porém, ele pode ser representado de várias maneiras:


Um inteiro decimal: 895;
Um número com um ponto (e não uma vírgula): 845.32;
Uma fração: 27/11;
Um número exponencial, ou seja, um número (eventualmente com vírgula) seguido da letra e (ou E) e de um inteiro correspondente à potência de 10 (assinado ou não, isto é, precedido de um + ou -):

2.75e-2;
35.8E+10;
.25e-2.

Na verdade, os números reais são números com vírgula flutuante, ou seja, um número em que a posição da vírgula não é fixa e é identificada por uma parte de seus bits (conhecido como o expoente), o restante dos bits permitem codificar o número sem vírgula (a mantissa).

Os números do tipo float são codificados em 32 bits, incluindo:

23 bits para a mantissa;
8 bits para o expoente;
1 bit para o sinal.

Os números do tipo duplo são codificados em 64 bits, incluindo:

52 bits para a mantissa;
11 bits para o expoente;
1 bit para o sinal.

Os números do tipo longo duplo são codificados em 80 bits, incluindo:

64 bits para a mantissa;
15 bits para o expoente;
1 bit para o sinal.

A precisão dos números reais é aproximada. Ela depende do número de posições decimais, dependendo do tipo real, ela será, no mínimo:

de 6 números para o tipo flutuante;
de 15 números para o tipo duplo;
de 17 números para o tipo longo duplo.

Caractere (char)

O tipo char (do inglês character) armazena o valor ASCII de um caractere, ou seja, um número inteiro.

Por padrão, os números são assinados, isso significa que eles têm um sinal. Para armazenar informações sobre o sinal (em binário), os computadores usam o complemento a dois. Então, um dado de tipo char é assinado, o que não significa que a letra possui um sinal, mas simplesmente que, na memória, o valor que codifica o caractere pode ser negativo.

Se, por exemplo, quisermos armazenar a letra B (seu código ASCII é 66), poderemos definir este dado, seja pelo número 66, seja notando o ’B’, onde as aspas simples significam código ASCII de...

Não existe tipo de dados para as cadeias de caracteres (strings) em linguagem C. Para criar uma string, vamos utilizar tabelas contendo em cada uma de suas caixas um caractere.

Como criar um tipo de dado

Em linguagem C é possível definir um novo tipo de dados usando a palavra-chave typedef. Este admite a seguinte sintaxe:

typedefCaracterísticas_do_tipo Nome_do_tipo

onde

Características_do_tipo representa um tipo de dado existente (ex: float, short int, etc.);
Nome_do_tipo define o nome que você dá ao novo tipo de dado.

Assim, a seguinte instrução cria um tipo de dado Ch inspirado no tipo char:

typedef char Ch

Conversão do tipo de dados

A conversão do tipo de dados refere-se à alteração do tipo de dados para outro. Por exemplo, pode acontecer que você queira trabalhar com um tipo de variável e, em seguida, usar em outro tipo . Imagine que você trabalhe com uma variável com vírgula flutuante (tipo float), você pode querer "excluir os dígitos após a vírgula", ou seja, converter um float para int. Isto pode ser feito de duas maneiras:

Conversão implícita: que consiste em uma modificação do tipo de dados executado, automaticamente, pelo compilador. Isto significa que, quando armazenamos um tipo de dado em uma variável declarada com outro tipo, o compilador não retornará um erro, mas efetuará uma conversão implícita do dado, antes de atribuí-lo à variável:

int x; 
x = 8.324;

onde x conterá o valor 8 depois da alocação.

Conversão explícita: também chamada de operação cast, consiste em uma modificação do tipo de dado forçado. Isso significa que você usa um operador, dito de cast, para especificar a conversão. O operador de cast é simplesmente o tipo de dado no qual desejamos converter uma variável, entre parênteses, que precede a variável:

int x; 
x = (int)8.324;

onde x conterá o valor 8 depois da alocação.

Foto: © Ktchung - 123RF.com
Publicado por pintuda. Última modificação: 1 de dezembro de 2017 às 13:09 por Pedro.CCM.
Este documento, intitulado 'Linguagem C: os tipos de dados', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.