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 - constO 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