sábado, 15 de outubro de 2016

C: Tipo de dados

Primitivos

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 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;
}



Declaração de variáveis

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.

NomeDescrição
CHAR_MINMenor valor de um char
CHAR_MAXMaior valor de um char
INT_MINMenor valor de um int
INT_MAXMaior valor de um int
FLT_MINMenor valor de um float
FLT_MAXMaior valor de um float
DBL_MINMenor valor de um double
DBL_MAXMaior 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;
}


Solução das atividades nesse link

Nenhum comentário:

Postar um comentário

LinkWithin

Related Posts Plugin for WordPress, Blogger...