Linguagem C - tipos de dados

Dezembro 2016


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

  • Números: inteiros (int) ou reais, ou seja, com vírgulas (float).
  • Ponteiros (pointer): 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 e o seu formato, ou seja, se eles são assinados (com o - 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 unidades (de 0 a 9), que não deve começar com o dígito 0.

Base hexadecimal: o número inteiro é representado por uma sequência de unidades (de 0 a 9 ou de A a F (ou de a a f)), que deve começar com 0x ou 0X.

Base octal: o número inteiro é representado por uma sequência de unidades (incluindo apenas os dígitos de 0 a 7), que deve começar com 0.

Os inteiros ã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 de 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 (possivelmente com vírgula) seguido da letra e (ou E) e de um inteiro correspondente à potência de 10 (assinado ou não, isto é, precedido por um "+" ou um "-"):

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

Na verdade, os números reais são números com vírgula flutuante, isto é, números em que a posição da vírgula não é fixa, e é identificada por uma parte dos seus bits (conhecido como o expoente), o restante dos bits usados para 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 casas decimais; dependendo do tipo de real, ela será no mínimo:

de 6 números para o tipo float
de 15 números para o tipo double
de 17 números para o tipo long double

Caractere (char)

O tipochar (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 de dois. Então, um dado de tipo char é assinado, isso não significa, é claro, que a carta tem um sinal, mas simplesmente que, na memória, o valor que codifica o caractere pode ser negativo...

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

Nãoexiste um tipo de dado 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...

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, ...)
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 <ital>char:

typedef char Ch

Conversão de tipo de dados

Chamamos de conversão de tipo de dados, o fato de alterar o tipo de um dado para outro. Pode acontecer, por exemplo, que queiramos trabalhar com um tipo de variável e, em seguida, usar em outro tipo . Imagine que trabalhemos, por exemplo, com uma variável de vírgula flutuante (tipo float), pode ser que queiramos "remover as casas decimais", ou seja, converter um float em int </ ital>. Isto pode ser feito de duas maneiras:


conversão implícita: uma conversão implícita é uma mudança do tipo de dado efetuado, automaticamente, pelo compilador. Isto significa que quando vamos armazenar um tipo de dado na variável declarada com outro tipo, o compilador não retornará um erro, mas efetuará uma conversão <ital>implícita
do dado, antes de atribuí-lo à variável.

int x; 
x = 8.324;

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




conversão explícita: uma conversão explícita (também chamada operação cast) é 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 se deseja converter uma variável, entre parênteses, antes da variável.

int x; 
x = (int)8.324;

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

Veja também :
Este documento, intitulado « Linguagem C - tipos de dados  »a partir de CCM (br.ccm.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.