¿Qué es el encasillado en C?
Typecasting es convertir un tipo de datos en otro. También se denomina conversión de datos o conversión de tipo. Es uno de los conceptos importantes introducidos en la programación 'C'.
La programación 'C' proporciona dos tipos de operaciones de conversión de tipos:
- Conversión de tipos implícitos
- Conversión de tipos explícitos
Conversión de tipos implícitos
La conversión de tipos implícitos significa la conversión de tipos de datos sin perder su significado original. Este tipo de encasillamiento es esencial cuando desea cambiar los tipos de datos sin cambiar la importancia de los valores almacenados dentro de la variable.
La conversión de tipo implícita ocurre automáticamente cuando un valor se copia a su tipo de datos compatible. Durante la conversión, se aplican reglas estrictas para la conversión de tipos. Si los operandos son de dos tipos de datos diferentes, entonces un operando que tenga un tipo de datos más bajo se convierte automáticamente en un tipo de datos más alto. Este tipo de conversión de tipo se puede ver en el siguiente ejemplo.
#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);}
Producción
1010
- En el ejemplo dado, hemos declarado una variable de tipo de datos corto con un valor inicializado como 10.
- En la segunda línea, hemos declarado una variable de tipo de datos int.
- En la tercera línea, hemos asignado el valor de la variable sa la variable a. En la tercera línea, la conversión de tipo implícita se realiza cuando el valor de la variable s, que es de tipo de datos corto, se copia en la variable a, que es de tipo de datos int.
Conversión de carácter a Int
Considere el ejemplo de agregar un carácter decodificado en ASCII con un número entero:
#includemain() {int number = 1;char character = 'k'; /*ASCII value is 107 */int sum;sum = number + character;printf("Value of sum : %d\n", sum );}
Producción:
Value of sum : 108
Aquí, el compilador ha realizado una promoción de enteros convirtiendo el valor de 'k' a ASCII antes de realizar la operación de adición real.
Jerarquía de conversión aritmética
El compilador procede primero a promover un carácter a un número entero. Si los operandos aún tienen diferentes tipos de datos, entonces se convierten al tipo de datos más alto que aparece en el siguiente gráfico de jerarquía:
Considere el siguiente ejemplo para comprender el concepto:
#includemain() {int num = 13;char c = 'k'; /* ASCII value is 107 */float sum;sum = num + c;printf("sum = %f\n", sum );}
Producción:
sum = 120.000000
En primer lugar, la variable c se convierte en un entero, pero el compilador convierte num y c en "float" y los agrega para producir un resultado "float".
Puntos importantes sobre las conversiones implícitas
- El tipo implícito de conversión de tipo también se denomina conversión de tipo estándar. No requerimos ninguna palabra clave o declaraciones especiales en la conversión de tipos implícita.
- La conversión de un tipo de datos más pequeño a un tipo de datos más grande también se denomina promoción de tipo . En el ejemplo anterior, también podemos decir que el valor de s se promueve a tipo entero.
- La conversión de tipo implícita siempre ocurre con los tipos de datos compatibles.
No podemos realizar una conversión de tipos implícita en los tipos de datos que no son compatibles entre sí, como:
- La conversión de float a int truncará la parte de la fracción, por lo que perderá el significado del valor.
- La conversión de doble a flotante redondeará los dígitos.
- La conversión de long int a int provocará la caída de un exceso de bits de orden superior.
En todos los casos anteriores, cuando convertimos los tipos de datos, el valor perderá su significado. Generalmente, el compilador advierte la pérdida de significado del valor.
La programación 'C' proporciona otra forma de encasillamiento que es el de tipo explícito.
Conversión de tipos explícitos
En la conversión de tipo implícita, el tipo de datos se convierte automáticamente. Hay algunos escenarios en los que es posible que debamos forzar la conversión de tipos. Supongamos que tenemos una variable div que almacena la división de dos operandos que se declaran como un tipo de datos int.
int result, var1=10, var2=3;result=var1/var2;
En este caso, después de la división realizada en las variables var1 y var2, el resultado almacenado en la variable "resultado" estará en formato entero. Siempre que esto sucede, el valor almacenado en la variable "resultado" pierde su significado porque no considera la parte fraccionaria que normalmente se obtiene en la división de dos números.
Para forzar la conversión de tipos en tales situaciones, usamos conversión de tipos explícita.
Requiere un operador de fundición de tipos. La sintaxis general para las operaciones de conversión de tipos es la siguiente:
(type-name) expression
Aquí,
- El nombre del tipo es el tipo de datos del lenguaje 'C' estándar.
- Una expresión puede ser una constante, una variable o una expresión real.
Escribamos un programa para demostrar la implementación de la conversión de tipos explícita en '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;}
Producción:
Value of a is 1.200000Value of b is 2
- Hemos inicializado una variable 'a' de tipo float.
- A continuación, tenemos otra variable 'b' de tipo de datos enteros. Dado que las variables 'a' y 'b' son de diferentes tipos de datos, 'C' no permitirá el uso de dicha expresión y generará un error. En algunas versiones de 'C', la expresión se evaluará pero no se desea el resultado.
- Para evitar tales situaciones, hemos encasillado la variable 'a' de tipo float. Mediante el uso de métodos de conversión de tipos explícitos, hemos convertido con éxito flotante en un entero de tipo de datos.
- Hemos impreso el valor de 'a' que sigue siendo un flotador
- Después de encasillar, el resultado siempre será un número entero 'b'.
De esta manera, podemos implementar la conversión de tipos explícita en la programación 'C'.
Resumen
- El encasillado también se denomina conversión de tipo.
- Significa convertir un tipo de datos en otro.
- La conversión de un tipo de datos más pequeño en uno más grande también se denomina promoción de tipo.
- 'C' proporciona una forma implícita y explícita de conversión de tipos.
- La conversión de tipo implícito funciona automáticamente cuando se encuentra el tipo de datos compatible.
- La conversión de tipos explícitos requiere un operador de conversión de tipos.
Tenga en cuenta las siguientes reglas para la práctica de programación al tratar con diferentes tipos de datos para evitar la pérdida de datos:
- Los tipos enteros deben convertirse a flotantes.
- Los tipos flotantes deben convertirse a dobles.
- Los tipos de caracteres deben convertirse a enteros.