Você está na página 1de 9

// http://www.forum.clickgratis.com.br/mentehacker/t-45.

html pos de variveis Temos 5 tipos bsicos de variveis em C, so eles: Obs:: Valores baseados em uma plataforma de 32 bits Citao: Int (em 32 bits, o tipo Long possui a mesma especificao) Inteiro; ocupa 4 bytes; utilizado para armazenar nmeros inteiros tanto negativos quanto positivos. Exemplos: -2,-51,-100,53,0,1,23,45... Char Caractere; ocupa 1 byte; utilizado para armazenar caracteres. Exemplos: 'a','b','c','X','Y','Z'... Float Nmeros reais (ponto flutuante com preciso simples); Ocupa 4 bytes; Exemplos: 1.5,2.4,-10.5,20.55... Double Nmeros reais (ponto flutuante com preciso dupla); Ocupa 8 bytes. Exemplos: 2.3,-23.53,535.53,1234.56... Void Vazio; pode ser transformado em qualquer um dos tipos listados acima.

Converso de tipos Vejamos: int x = 100; Acima declaramos uma varivel denominada "x" do tipo inteiro, inicializada com o valor 100, isto , x = 100. Supondo que temos a seguinte estrutura: int x = 100; char ch; Como faramos para atribuir varavel "ch" o valor de "x" ? Podemos simplesmente fazer: int x = 100; char ch = x; Pois bem, o valor de "ch" agora 100. Para confirmar, observe o programa abaixo:

Cdigo: #include <stdio.h> /* para usar printf() */ int main() { int x = 100; char ch; ch = x; printf("X = %d\nCH = %c",x,ch); return 0; } Resultado do programa: X = 100 ch = d Pois bem, utilizamos os formatadores "%d" e "%c" para mostrar na tela os valore s do inteiro e do char, respectivamente. Mas por que o valor de "ch" foi mostrad o como "d"? Como j foi dito, variveis do tipo char armazenam caracteres. Cada cara ctere possui um cdigo nmerico que o identifica - Cdigo Ascii. O cdigo Ascii do caractere "d" 100, isso explica o valor impresso pela funo. Por essa mesma razo, podemos fazer: char ch = 'A'; int x = ch; O cdigo ASCII de 'A' 65, portanto, o valor de "x" passaria a ser 65. Quando atribumos um valor de um inteiro a um caractere diretamente ou vice-versa , temos uma converso implcita, onde o compilador converte os valores automaticamen te. Segue abaixo as possveis converses implcitas: Citao: int para char; int para float; int para double; char para int; char para float; char para double; float para int; float para char; float para double; double para int; double para char; double para float;

Poderamos dizer que possvel converter valores numricos implicitamente. Vejamos: Cdigo: #include <stdio.h> /* para usar printf() */ int main() { int x = 65; /* Valor inicial => inteiro */ char a = x; /* inteiro para char */ float b = a; /* char para float */ double c = b; /* float para double */ printf("X printf("A printf("B printf("C return 0; } Resultado do programa: X A B C = = = = 65 A 65.000000 65.000000 = = = = %d\n",x); %c\n",a); %f\n",b); %Lf\n",c);

Existe ainda a converso explcita denominada TYPE CASTING, que consiste em forar qu e um tipo de dado seja interpretado como outro, veja: int x = 100; char y = (char)x; Da mesma forma, o valor de y seria 100 (caractere "d"), porm, convertemos explic itamente os valores. Citao: Sintaxe: var1 = (tipo)var2; var1: nome da varivel que receber o valor; tipo: tipo => converter em; var2: varivel a ser convertida. Outro exemplo: char ch = 'X'; int n = (int)ch;

O cdigo ASCII do caractere 'X' 88, portanto, na converso, o valor de "n" seria 88. Existe um tipo de converso que no pode ser realizado utilizando os mtodos acima, v ejamos: --------------------------------/* Incorreto! */ char string[6] = "12345"; int numero = string; ou /* Incorreto! */ char string[6] = "12345"; int numero = (int)string; --------------------------------Quando tentamos converter uma string para um inteiro, como no caso acima, o res ultado o endereo para o primeiro elemento (caractere) da string. Lolz??? vamos por parte: Uma string um array, tambm chamado vetor, que armazena caracteres cujo o ltimo o caractere NULO ('\0'). Exemplo: char string[6]="ABCDE"; Temos 6 possveis valores para o vetor que variam de 0 a 5 (o primeiro ndice de um array em C 0). Caractere: A B C D E \0 Posio: 0 1 2 3 4 5 -> ltimo ndice Cada elemento armazenando em um endereo de memria, e quando fazemos: "x = string" estamos atribuindo varivel X o endereo de memria referente ao primeiro elemento da string, que no caso, o caractere 'A'. Ento, como convertemos um valor de uma string para um inteiro e vice-versa? No s para inteiros, podemos utilizar funes auxiliares, definidas em "stdlib.h". So elas: Citao: Funo Descrio --------------------------------------------------------------------------------------atoi() => Converso de string para inteiro; atol() => Converso de string para inteiro longo; atof() => Converso de string para ponto flutuante (double ou float); itoa() => Converso de inteiro para string;

ltoa() => Converso de inteiro longo para string; gcvt() => Converso de ponto flutante(double ou float) para string; --------------------------------------------------------------------------------------Funo atoi() Citao: Sintaxe: int atoi(const char* string); string: string a ser convertida. A funo retorna o valor convertido. Exemplo: Cdigo: #include <stdio.h> /* para usar printf() */ #include <stdlib.h> /* converses */ int main() { char string[10]="12345"; int n; n = atoi(string); printf("n = %d",n); return 0; } Resultado do programa: n = 12345 -------------------------------------------Funo atol() Citao: Sintaxe: long atol(const char* string); string: string a ser convertida. A funo retorna o valor convertido.

Exemplo:

Cdigo: #include <stdio.h> /* para usar printf() */ #include <stdlib.h> /* converses */ int main() { char string[10]="9485234"; long n; n = atol(string); printf("n = %ld",n); return 0; } Resultado do programa: n = 9485234 -------------------------------------------Funo atof() Citao: Sintaxe: double atof(const char* string); string: string a ser convertida. A funo retorna o valor convertido. Exemplo: Cdigo: #include <stdio.h> /* para usar printf() */ #include <stdlib.h> /* converses */ int main() { char string[10]="100.5"; float n; n = atof(string); printf("n = %f",n); return 0; } Resultado do programa: n = 100.500000 -------------------------------------------Funo itoa()

Citao: Sintaxe: char * itoa(int numero,char * buffer, int base); num: nmero a ser convertido; buffer: buffer que receber o valor; base: base numrica para a qual o nmero ser convertido: 2 - binria 8 - octal 10 - decimal 16 - hexadecimal A funo retorna o valor convertido. Exemplo: Cdigo: #include <stdio.h> /* para usar printf() */ #include <stdlib.h> /* converses */ int main() { char valor[10]; int num=1234; itoa(num,valor,10); /* Converte 1234 para string, na base decimal */ printf("valor = %s",valor); /* Mostra o valor na tela - "%s" => utilizado para imprimir strings */ return 0; } Resultado do programa: valor = 1234 -------------------------------------------Funo ltoa() Citao: Sintaxe: char * itoa(long numero,char * buffer, int base); num: nmero a ser convertido. buffer: buffer que receber o valor; base:

base numrica para a qual o nmero ser convertido: 2 - binria 8 - octal 10 - decimal 16 - hexadecimal A funo retorna o valor convertido. Exemplo: Cdigo: #include <stdio.h> /* para usar printf() */ #include <stdlib.h> /* converses */ int main() { char valor[10]; long num=1234; ltoa(num,valor,16); /* Converte 1234 para string, na base HEXADECIMAL */ printf("valor = %s",valor); return 0; } Resultado do programa: valor = 4D2 -------------------------------------------Funo gcvt() Citao: Sintaxe: char * gcvt(double numero,int digitos, char * buffer); num: nmero a ser convertido; digitos: nmero de digitos que sero escritos na string (incluindo o separador: "."); buffer: buffer que receber o valor. A funo retorna o valor convertido. Exemplo: Cdigo: #include <stdio.h> /* para usar printf() */ #include <stdlib.h> /* converses */ int main()

{ char valor[10]; double num = 10.50; gcvt(num,4,valor); /* Imprime 4 dgitos */ printf("valor = %s",valor); return 0; }

Resultado do programa: valor = 10.5 Quando o nmero de digitos especificado, for menor do que o nmero total de dgitos d o nmero em ponto flutuante, o valor arredondado, exemplo: Cdigo: #include <stdio.h> /* para usar printf() */ #include <stdlib.h> /* converses */ int main() { char valor[10]; float num = 100.70; gcvt(num,3,valor); /* O valor NUM possui 6 dgitos, porm apenas 3 sero impressos => arredonda 100.70 para 101 */ printf("valor = %s",valor); return 0; } Resultado: valor = 101

Finalizando Termino aqui este breve tutorial sobre converso de tipos Embora existam outras funes utilizadas para a converso so as principais. As demais funes, so utilizadas para que tenham seu tipo modificado. Um exemplo de varivel com ed long" onde h uma especificao para que esta varivel armazene em C. de tipos, as listadas acima converter valores de variveis tipo modificado "unsign apenas nmeros positivos.

Você também pode gostar