C - Tipo de fundición
La conversión de un tipo de datos en otro se conoce como conversión de tipos o conversión de tipos. Por ejemplo, si desea almacenar un valor 'largo' en un entero simple, puede escribir cast 'largo' en 'int'. Puede convertir los valores de un tipo a otro explícitamente utilizando elcast operator como sigue -
(type_name) expression
Considere el siguiente ejemplo en el que el operador de conversión hace que la división de una variable entera por otra se realice como una operación de punto flotante:
#include <stdio.h>
main() {
int sum = 17, count = 5;
double mean;
mean = (double) sum / count;
printf("Value of mean : %f\n", mean );
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Value of mean : 3.400000
Cabe señalar aquí que el operador de conversión tiene prioridad sobre la división, por lo que el valor de sum primero se convierte a tipo double y finalmente se divide por conteo dando un valor doble.
Las conversiones de tipo pueden ser implícitas, lo que el compilador realiza automáticamente, o puede especificarse explícitamente mediante el uso de la cast operator. Se considera una buena práctica de programación utilizar el operador de conversión siempre que sea necesario realizar conversiones de tipo.
Promoción de enteros
La promoción de enteros es el proceso mediante el cual los valores de tipo entero "menores" que int o unsigned int se convierten en int o unsigned int. Considere un ejemplo de cómo agregar un carácter con un número entero:
#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 );
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Value of sum : 116
Aquí, el valor de sum es 116 porque el compilador está promocionando enteros y convirtiendo el valor de 'c' a ASCII antes de realizar la operación de suma real.
Conversión aritmética habitual
los usual arithmetic conversionsse realizan implícitamente para convertir sus valores en un tipo común. El compilador primero realiza una promoción de enteros ; si los operandos todavía tienen tipos diferentes, entonces se convierten al tipo que aparece más alto en la siguiente jerarquía:
Las conversiones aritméticas habituales no se realizan para los operadores de asignación, ni para los operadores lógicos && y ||. Tomemos el siguiente ejemplo para entender el concepto:
#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 );
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Value of sum : 116.000000
Aquí, es sencillo entender que primero c se convierte en un número entero, pero como el valor final es doble, se aplica la conversión aritmética habitual y el compilador convierte i y c en 'float' y los agrega dando un resultado 'float'.