O que é Typecasting em C?
Typecasting é a conversão de um tipo de dados em outro. Também é chamado de conversão de dados ou conversão de tipo. É 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
- Cast de tipo explícito
Cast de tipo implícito
Casting de tipo implícito significa conversão de tipos de dados sem perder seu significado original. Esse tipo de projeção de tipos é essencial quando você deseja alterar os tipos de dados sem alterar o significado dos valores armazenados dentro da variável.
A conversão implícita de tipo ocorre automaticamente quando um valor é copiado para seu tipo de dados compatível. Durante a conversão, regras estritas para conversão de tipo são aplicadas. Se os operandos forem de dois tipos de dados diferentes, um operando com tipo de dados inferior é automaticamente convertido em um tipo de dados superior. Esse tipo de conversão de tipo pode ser visto no exemplo a seguir.
#includeint main(){short a=10; //initializing variable of short data typeint b; //declaring int variableb=a; //implicit type castingprintf("%d\n",a);printf("%d\n",b);}
Resultado
1010
- No exemplo fornecido, declaramos uma variável do tipo de dados curto com valor inicializado como 10.
- Na segunda linha, declaramos uma variável de um tipo de dados int.
- Na terceira linha, atribuímos o valor da variável s à variável a. Na terceira linha, a conversão de tipo implícita é realizada quando 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 Caráter em Int
Considere o exemplo de adição de um caractere decodificado em ASCII com um inteiro:
#includemain() {int number = 1;char character = 'k'; /*ASCII value is 107 */int sum;sum = number + character;printf("Value of sum : %d\n", sum );}
Resultado:
Value of sum : 108
Aqui, o compilador fez uma promoção de inteiro convertendo o valor de 'k' em ASCII antes de realizar a operação de adição real.
Hierarquia de conversão aritmética
O compilador primeiro prossegue promovendo um caractere a um inteiro. Se os operandos ainda tiverem diferentes tipos de dados, eles serão convertidos para o tipo de dados mais alto que aparece no seguinte gráfico de hierarquia:
Considere o seguinte exemplo para entender o conceito:
#includemain() {int num = 13;char c = 'k'; /* ASCII value is 107 */float sum;sum = num + c;printf("sum = %f\n", sum );}
Resultado:
sum = 120.000000
Em primeiro lugar, a variável c é convertida em inteiro, mas o compilador converte num 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 tipos de dados menores em tipos de dados maiores também é chamada de promoção de tipo . No exemplo acima, também podemos dizer que o valor de s é promovido para o tipo inteiro.
- A conversão de tipo implícita sempre acontece com os tipos de dados compatíveis.
Não podemos realizar conversão implícita de tipo nos tipos de dados que não são compatíveis entre si, como:
- A conversão de float em um int truncará a parte da fração, portanto, perderá o significado do valor.
- A conversão de double para float arredondará os dígitos.
- A conversão de long int em int causará o descarte de bits de ordem superior em excesso.
Em todos os casos acima, quando convertemos os tipos de dados, o valor perderá seu significado. Geralmente, a perda de significado do valor é avisada pelo compilador.
A programação 'C' fornece outra forma de conversão de tipos, que é a conversão de tipos explícita.
Cast 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" ficará em formato inteiro. Sempre que isso acontece, o valor armazenado na variável "resultado" perde o significado porque não considera a parte fracionária que normalmente se obtém na divisão de dois números.
Para forçar a conversão de tipo em tais situações, usamos conversão explícita de tipo.
Requer um operador de fundiçã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 da linguagem 'C' padrão.
- Uma expressão pode ser uma constante, uma variável ou uma expressão real.
Vamos escrever um programa para demonstrar a implementação da conversão explícita de tipos em 'C'.
#includeint main(){float a = 1.2;//int b = a; //Compiler will throw an error for thisint b = (int)a + 1;printf("Value of a is %f\n", a);printf("Value of b is %d\n",b);return 0;}
Resultado:
Value of a is 1.200000Value of b is 2
- Inicializamos uma variável 'a' do tipo float.
- Em seguida, 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, fizemos um typecast da variável 'a' do tipo float. Usando métodos explícitos de conversão de tipo, convertemos com sucesso float em tipo de dados inteiro.
- Imprimimos o valor de 'a' que ainda é um float
- Após o typecasting, o resultado será sempre um inteiro 'b.'
Desta forma, podemos implementar conversão explícita de tipo 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.
- 'C' fornece uma maneira implícita e explícita de conversão de tipo.
- A conversão de tipo implícita 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.
Lembre-se das seguintes regras para a prática de programação ao lidar com diferentes tipos de dados para evitar a perda de dados:
- Os tipos inteiros devem ser convertidos em float.
- Os tipos de float devem ser convertidos em double.
- Os tipos de caracteres devem ser convertidos em inteiros.