Casting de tipo em C: conversão de tipo, implícito, explícito com exemplo
O que é conversão de tipo em C?
Typecasting é converter um tipo de dados em outro. Também é chamado de conversão de dados ou conversão de tipo na linguagem C. É um dos conceitos importantes introduzidos na programação 'C'.
A programação 'C' fornece dois tipos de operações de conversão de tipo:
- Cast de tipo implícito
- Casting de tipo explícito
Cast de tipo implícito
A conversão implícita de tipos significa a conversão de tipos de dados sem perder seu significado original. Este tipo de typecasting é essencial quando você deseja alterar os tipos de dados sem alterando o significado dos valores armazenados dentro do variável.
A conversão implícita de tipo em C acontece automaticamente quando um valor é copiado para seu tipo de dados compatível. Durante a conversão, são aplicadas regras estritas para conversão de tipo. Se os operandos forem de dois tipos de dados diferentes, então um operando com tipo de dados inferior será automaticamente convertido em um tipo de dados superior. Este tipo de conversão de tipo pode ser visto no exemplo a seguir.
#include<stdio.h> int main(){ short a=10; //initializing variable of short data type int b; //declaring int variable b=a; //implicit type casting printf("%d\n",a); printf("%d\n",b); }
Saída:
10 10
- No exemplo dado, declaramos uma variável de tipo de dados curto com valor inicializado como 10.
- Na segunda linha, declaramos uma variável do tipo de dados int.
- Na terceira linha, atribuímos o valor da variável s à variável a. Na terceira linha, a conversão implícita de tipo é executada à medida que o valor da variável s, que é do tipo de dados curto, é copiado para a variável a, que é do tipo de dados int.
Convertendo Caractere em Int
Considere o exemplo de adição de um caractere decodificado em ASCII com um número inteiro:
#include <stdio.h> main() { int number = 1; char character = 'k'; /*ASCII value is 107 */ int sum; sum = number + character; printf("Value of sum : %d\n", sum ); }
Saída:
Value of sum : 108
Aqui, o compilador fez uma promoção de número inteiro convertendo o valor de 'k' em ASCII antes de executar a operação de adição real.
Hierarquia de conversão aritmética
O compilador primeiro prossegue promovendo um caractere a um número inteiro. Se os operandos ainda possuírem tipos de dados diferentes, eles serão convertidos para o tipo de dados mais alto que aparece no seguinte gráfico hierárquico:
Considere o seguinte exemplo para entender o conceito:
#include <stdio.h> main() { int num = 13; char c = 'k'; /* ASCII value is 107 */ float sum; sum = num + c; printf("sum = %f\n", sum );}
Saída:
sum = 120.000000
Primeiro de tudo, a variável c é convertida em inteiro, mas o compilador converte Números e c em “float” e os adiciona para produzir um resultado 'float'.
Pontos importantes sobre conversões implícitas
- O tipo implícito de conversão de tipo também é chamado de conversão de tipo padrão. Não exigimos nenhuma palavra-chave ou instruções especiais na conversão implícita de tipo.
- A conversão de um tipo de dados menor para um tipo de dados maior também é chamada de tipo promoção. No exemplo acima, também podemos dizer que o valor de s é promovido ao tipo inteiro.
- A conversão implícita de tipo sempre acontece com os tipos de dados compatíveis.
Não podemos realizar a conversão implícita de tipos em tipos de dados que não são compatíveis entre si, como:
- A conversão de float em um int truncará a parte fracionária, perdendo assim o significado do valor.
- A conversão de double em float arredondará os dígitos.
- A conversão de long int em int causará a eliminação de bits de ordem superior em excesso.
Em todos os casos acima, ao convertermos os tipos de dados, o valor perderá o significado. Geralmente, a perda de significado do valor é avisada pelo compilador.
Programação 'C' fornece outra maneira de conversão de tipo, que é a conversão de tipo explícita.
Casting de tipo explícito
Na conversão implícita de tipo, o tipo de dados é convertido automaticamente. Existem alguns cenários em que podemos ter que forçar a conversão de tipo. Suponha que temos uma variável div que armazena a divisão de dois operandos que são declarados como um tipo de dados int.
int result, var1=10, var2=3; result=var1/var2;
Neste caso, após a divisão realizada nas variáveis var1 e var2 o resultado armazenado na variável “resultado” estará no formato inteiro. Sempre que isso acontece, o valor armazenado na variável “resultado” perde o sentido porque não considera a parte fracionária que normalmente é obtida na divisão de dois números.
Para forçar a conversão de tipo em tais situações, usamos conversão de tipo explícita.
Requer um operador de conversão de tipo. A sintaxe geral para operações de conversão de tipo é a seguinte:
(type-name) expression
Aqui,
- O nome do tipo é o tipo de dados padrão da linguagem 'C'.
- Uma expressão pode ser uma constante, uma variável ou uma expressão real.
Vamos escrever um programa para demonstrar como fazer conversão de tipo em C com conversão de tipo explícita.
#include<stdio.h> int main() { float a = 1.2; //int b = a; //Compiler will throw an error for this int b = (int)a + 1; printf("Value of a is %f\n", a); printf("Value of b is %d\n",b); return 0; }
Saída:
Value of a is 1.200000 Value of b is 2
- Inicializamos uma variável 'a' do tipo float.
- A seguir, temos outra variável 'b' do tipo de dados inteiro. Como as variáveis 'a' e 'b' são de tipos de dados diferentes, 'C' não permitirá o uso de tal expressão e gerará um erro. Em algumas versões de 'C', a expressão será avaliada, mas o resultado não será desejado.
- Para evitar tais situações, tipificamos a variável 'a' do tipo float. Usando métodos explícitos de conversão de tipo, convertemos float com sucesso em tipo de dados inteiro.
- Imprimimos o valor de 'a' que ainda é um float
- Após a conversão de tipo, o resultado sempre será um número inteiro 'b.'
Desta forma, podemos implementar a conversão explícita de tipos na programação C.
Resumo
- Typecasting também é chamado de conversão de tipo
- Significa converter um tipo de dados em outro.
- A conversão de tipos de dados menores em maiores também é chamada de promoção de tipo.
- Existem dois tipos de conversão de tipo: conversão de tipo implícita e explícita em C.
- A conversão implícita de tipo opera automaticamente quando o tipo de dados compatível é encontrado.
- A conversão explícita de tipo requer um operador de conversão de tipo.
Tenha em mente as seguintes regras para prática de programação ao lidar com diferentes tipos de dados para evitar perda de dados:
- Os tipos inteiros devem ser convertidos em flutuantes.
- Os tipos float devem ser convertidos em double.
- Os tipos de caracteres devem ser convertidos para inteiros.