TypeCasting em C: implícito, explícito com exemplo

Índice:

Anonim

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:

  1. Cast de tipo implícito
  2. 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

  1. No exemplo fornecido, declaramos uma variável do tipo de dados curto com valor inicializado como 10.
  2. Na segunda linha, declaramos uma variável de um tipo de dados int.
  3. 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:

#include main() {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:

#include main() {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:

  1. A conversão de float em um int truncará a parte da fração, portanto, perderá o significado do valor.
  2. A conversão de double para float arredondará os dígitos.
  3. 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

  1. Inicializamos uma variável 'a' do tipo float.
  2. 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.
  3. 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.
  4. Imprimimos o valor de 'a' que ainda é um float
  5. 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.