A linguagem C possui 5 tipos primitivos: char, int, float, double e void. Vamos dar uma olhada nos 4 primeiros e vamos estudar o void junto com funções.
- char - Usado para representar um caractere.
- int - Usado para representa um inteiro
- float - Usado para representar um numero de ponto flutuante
- double - Usado para representa um numero de ponto flutuante com precisão dupla
int main(void) { //Tipo caractere char var1 = 'a'; //Tipo int int varb = 123; //Tipo ponto flutuante float varc = 3.14; return 0; }
O tamanho ocupado na memoria e o intervalo de cada tipo depende do sistema para o qual o código fonte vai ser compilado.
Modificadores de sinais
O C possui dois modificadores de sinais: signed e unsigned
- signed: A variável possui sinal.
- unsigned: A variável não possui sinal
Os modificadores de sinais só podem ser usados em char e em int. Por padrão em C todas os tipos primitivos são signed. A tabela abaixo mostra como ficaria o intervalos da primitiva int com sinal e sem sinal.
Largura (bits) | Sinal(signed) | Sem sinal(unsigned) |
8 | -128 a +127 | 0 a +255 |
16 | -32768 a +32767 | 0 a +65535 |
32 | -2147483648 a +2147483647 | 0 a +4294967295 |
int main(void) { //Numero com sinal signed int var1 = -4; //Equivale a signed int int var2 = -4; //Numero sem sinal unsigned int var3 = 123; }Tome cuidado com a declaração da suas variáveis, uma vezes que o C não dar erro ao tentamos colocar um numero negativo em uma variável unsigned
#include <stdio.h> int main(void) { //Numero sem sinal unsigned int var1 = -123; //Exibe var1 na tela printf("var1 = %u", var1); return 0; }Saída:
var1 = 4294967173 |
Modificadores de tamanho
O C possui dois modificadores de tamanhos: short e long.
- short - diminui o espaço usado de uma variável, diminuindo a sua faixa de valores, esse modificador pode ser usado com o int
- long - aumenta o espaço usado de uma variável, aumentando a sua faixa de valores, esse modificador pode ser usado com int e double
Obs.: O uso do short e long não necessariamente vai modificar a variável, dependendo do sistema para isso.
int main(void) { short int var1 = 0; long double var2 = 1.0e+300; }Modificador de atributo - const
O C possui 5 modificadores de atributo: const, volatile, extern, static e register. Vamos estudar agora o modificador const, que é muito utilizado na linguagem em C. Os extern e static precisam de outros conceitos que vamos estudar depois, e para eles não ficarem sozinhos vamos deixar para estudar junto o volatile e register.
- const - Variaveis com esse atributo não podem ser modificadas.
O const é ideal para criar constantes, se tentamos modificar uma variável constante vai dar erro.
int main(void) { //Cria uma constante const float PI = 3.14159265359; //Erro PI = 3.14; }
De uma maneira bem genérica o jeito de declara variáveis no C:
<Modificadores> <Tipo> <Nome da variável>
Podemos ou não atribuir um valor na inicialização, caso não atribuímos a variável é inicializa com LIXO. Então é uma boa pratica de programação sempre inicializar as variáveis.
int var1 = 123; long int var2 = 456; const int var3 = 768; const unsigned long int var4 = 123456; double var5 = 1.0; float var6;
Podemos também declarar variáveis usando só modificadores, elas automaticamente vão ser do tipo int
int var1 = 123; long var2 = 456; const var3 = 768; const unsigned long var4 = 123456; double var5 = 1.0; float var6;
O operador sizeof()
Como foi dito o tamanho da variável depende do sistema. Para saber o tamanho que um tipo ocupa na memoria basta usar o operador sizeof, passando como argumento o tipo ou o modificador e o tipo
#include <stdio.h> int main(){ printf("tamanho do short int %lu\n",sizeof(short int)); printf("tamanho do int %lu\n",sizeof(int)); printf("tamanho do long int %lu\n",sizeof(long int)); //Mesmo que o tamanho do int printf("tamanho do unsigned int %lu\n",sizeof(unsigned int)); }Saída:
tamanho do short int 2 tamanho do int 4 tamanho do long int 8 tamanho do unsigned int 4 |
Limites
Muitas vezes precisamos saber o intervalo que a variável é definida. Existem um jeito fácil de saber isso em C, usando duas bibliotecas
<limits.h> (possui definições para o tipo inteiro: char e int) e <float.h> (possui definições para o tipo ponto flutuante: float e double).
O MAX e MIN para os inteiros, representa o seu intervalo, já para o ponto flutuante, representa o menor valor antes de ser zero e o maior valor antes de ser infinito.
Nome | Descrição |
CHAR_MIN | Menor valor de um char |
CHAR_MAX | Maior valor de um char |
INT_MIN | Menor valor de um int |
INT_MAX | Maior valor de um int |
FLT_MIN | Menor valor de um float |
FLT_MAX | Maior valor de um float |
DBL_MIN | Menor valor de um double |
DBL_MAX | Maior valor de um double |
#include <stdio.h> #include <limits.h> #include <float.h> int main(){ printf("char min: %i max: %i\n",CHAR_MIN,CHAR_MAX); printf("int min: %i max: %i\n",INT_MIN,INT_MAX); printf("float min: %g max: %g\n",FLT_MIN,FLT_MAX); printf("double min: %g max: %g\n",DBL_MIN,DBL_MAX); return 0; }Saída:
char min: -128 max: 127 int min: -2147483648 max: 2147483647 float min: 1.17549e-38 max: 3.40282e+38 double min: 2.22507e-308 max: 1.79769e+308 |
Existe outras definições nas bibliotecas, podemos ver outras no programa 2 da na atividade.
Atividades
A ideia dessa atividade é conhecer um pouco do ambiente de desenvolvimento.
1. Execute o programa abaixo para saber o tamanho de cada tipo.
#include <stdio.h> int main(void){ printf("tamanho char: %lu\n", sizeof(char)); printf("tamanho short: %lu\n", sizeof(short)); printf("tamanho int: %lu\n", sizeof(int)); printf("tamanho long: %lu\n", sizeof(long)); printf("tamanho long long: %lu\n", sizeof(long long)); printf("tamanho float: %lu\n", sizeof(float)); printf("tamanho double: %lu\n", sizeof(double)); printf("tamanho long double: %lu\n", sizeof(long double)); return 0; }
2. Execute o programa abaixo para saber o intervalo de cada tipo
#include <stdio.h> #include <limits.h> #include <float.h> int main(void){ printf("char min: %i max: %i\n",CHAR_MIN,CHAR_MAX); printf("unsigned char min: 0 max: %i\n",UCHAR_MAX); printf("short min: %i max: %i\n",SHRT_MIN,SHRT_MAX); printf("unsigned short min: 0 max: %i\n",USHRT_MAX); printf("int min: %i max: %i\n",INT_MIN,INT_MAX); printf("unsigned int min: 0 max: %u\n",UINT_MAX); printf("long min: %li max: %li\n",LONG_MIN,LONG_MAX); printf("unsigned long min: 0 max: %lu\n",ULONG_MAX); printf("long long min: %lli max: %lli\n",LLONG_MIN,LLONG_MAX); printf("unsigned long long min: 0 max: %llu\n",ULLONG_MAX); printf("float min: %g max: %g\n",FLT_MIN,FLT_MAX); printf("double min: %g max: %g\n",DBL_MIN,DBL_MAX); printf("long double min: %Lg max: %Lg\n",LDBL_MIN,LDBL_MAX); return 0; }
Nenhum comentário:
Postar um comentário