Conversão de tipos em C: conversão implícita e explícita
⚡ Resumo Inteligente
A conversão de tipos em C transforma um tipo de dado em outro, seja implicitamente, quando o compilador promove automaticamente um tipo compatível menor, ou explicitamente, quando um programador força a conversão com um operador de conversão para controlar a precisão e evitar resultados inesperados.
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. Esse tipo de conversão é essencial quando você deseja alterar os tipos de dados sem alterar o significado dos valores armazenados. 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
Primeiramente, a variável c é convertida para inteiro, mas o compilador converte num e c em "float" e as soma para produzir um resultado do tipo '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 promoção de tipo. No exemplo acima, podemos dizer que o valor de `s` foi promovido para o 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.
- Converter um inteiro longo para um inteiro causará uma queda de valor.ping 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.
- Em seguida, temos outra variável 'b' do tipo inteiro. Como as variáveis 'a' e 'b' são de tipos de dados diferentes, a linguagem 'C' não permite o uso dessa expressão e resultará em um erro. Em algumas versões de 'C', a expressão será avaliada, mas o resultado não será o 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.




