C - Fundição Tipo
A conversão de um tipo de dados em outro é conhecida como conversão de tipo ou conversão de tipo. Por exemplo, se você deseja armazenar um valor 'longo' em um inteiro simples, você pode digitar cast 'longo' para 'int'. Você pode converter os valores de um tipo para outro explicitamente usando ocast operator como segue -
(type_name) expression
Considere o exemplo a seguir, onde o operador de conversão faz com que a divisão de uma variável inteira por outra seja realizada como uma operação de ponto flutuante -
#include <stdio.h>
main() {
int sum = 17, count = 5;
double mean;
mean = (double) sum / count;
printf("Value of mean : %f\n", mean );
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Value of mean : 3.400000
Deve-se notar aqui que o operador de elenco tem precedência sobre a divisão, portanto, o valor de sum é primeiro convertido para tipo double e, finalmente, é dividido por contagem, resultando em um valor duplo.
As conversões de tipo podem ser implícitas, o que é executado pelo compilador automaticamente, ou podem ser especificadas explicitamente através do uso do cast operator. É considerada uma boa prática de programação usar o operador de conversão sempre que forem necessárias conversões de tipo.
Promoção Inteira
A promoção de inteiros é o processo pelo qual os valores do tipo inteiro "menor" que int ou unsigned int são convertidos em int ou unsigned int. Considere um exemplo de adição de um caractere com um inteiro -
#include <stdio.h>
main() {
int i = 17;
char c = 'c'; /* ascii value is 99 */
int sum;
sum = i + c;
printf("Value of sum : %d\n", sum );
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Value of sum : 116
Aqui, o valor de sum é 116 porque o compilador está fazendo promoção de inteiros e convertendo o valor de 'c' para ASCII antes de realizar a operação de adição real.
Conversão Aritmética Usual
o usual arithmetic conversionssão executados implicitamente para converter seus valores em um tipo comum. O compilador primeiro executa a promoção de inteiro ; se os operandos ainda tiverem tipos diferentes, eles serão convertidos para o tipo que aparece mais alto na seguinte hierarquia -
As conversões aritméticas usuais não são realizadas para os operadores de atribuição, nem para os operadores lógicos && e ||. Tomemos o seguinte exemplo para entender o conceito -
#include <stdio.h>
main() {
int i = 17;
char c = 'c'; /* ascii value is 99 */
float sum;
sum = i + c;
printf("Value of sum : %f\n", sum );
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Value of sum : 116.000000
Aqui, é simples entender que o primeiro c é convertido para inteiro, mas como o valor final é duplo, a conversão aritmética usual se aplica e o compilador converte ie c em 'float' e os adiciona produzindo um resultado 'float'.