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 quantidade de memória (o número de bytes) ocupada pelos dados, assim como a sua representação.
Vamos iniciar esse artigo compreendendo os conceitos fundamentais da linguagem C:
Na linguagem C, existem vários tipos inteiros dependendo do número de bytes em que são codificados, bem como do 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 essa tabela com os tipos de dados em linguagem C:
Tipo de dado | Significado | Tamanho (em bytes) | Intervalo de valores aceitos |
---|---|---|---|
char | Caractere | 1 | de -128 a 127 |
unsigned char | Caractere não assinado | 1 | 0 a 255 |
short int | Inteiro curto | 2 | de -32.768 a 32.767 |
unsigned short int | Inteiro curto não assinado | 2 | de 0 a 65.535 |
int | Inteiro | 2 (16 bits) 4 (32 bits) |
de -32.768 a 32.767 de -2.147.483.648 a 2.147.483.647 |
unsigned int | Inteiro não assinado | 2 (16 bits) 4 (32 bits) |
de 0 a 65.535 de 0 a 4.294.967.295 |
long int | Inteiro longo | 4 | de -2.147.483.648 a 2.147.483.647 |
unsigned long int | Inteiro longo não assinado | 4 | de 0 a 4.294.967.295 |
float | Flutuante (real) | 4 | 3.4*10-38 a 3.4*1038 |
duplo | Flutuante duplo | 8 | de 1.7*10-308 a 1.7*10308 |
longo duplo | Flutuante duplo longo | 10 | 3.4*10-4932 a 3.4*104932 |
Um número inteiro é um número sem vírgula, que pode ser expresso em diferentes bases:
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.
Um número com vírgula flutuante é um número com vírgula, porém, ele pode ser representado de várias maneiras:
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:
Os números do tipo duplo são codificados em 64 bits, incluindo:
Os números do tipo longo duplo são codificados em 80 bits, incluindo:
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:
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, 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. 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 dado para as cadeias de caracteres (strings) em linguagem C. Para criar uma string, vamos utilizar tabelas contendo um caractere em cada uma de suas caixas.
Em linguagem C, é possível definir um novo tipo de dados usando a palavra-chave typedef. Este admite a seguinte sintaxe:
typedef<ital>Características_do_tipo Nome_do_tipo</ital>
Onde
Assim, a seguinte instrução cria um tipo de dado Ch inspirado no tipo char:
typedef <bold>char Ch</bold>
A conversão do tipo de dado refere-se à alteração do tipo de dado para outro. Por exemplo, pode acontecer que você queira trabalhar com um tipo de variável e, em seguida, usar outro tipo. Imagine que você trabalhe com uma variável com vírgula flutuante (tipo float) e quer excluir os dígitos após a vírgula, ou seja, converter um float em int. Isso pode ser feito de duas maneiras:
Conversão implícita: consiste em uma modificação do tipo de dado executado automaticamente pelo compilador. Isso 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 forçada do tipo de dado. Isso significa que você usa um operador, dito 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: © Unsplash