jueves, 5 de septiembre de 2013

Conversión de tipos en C++. ¡Descubre cómo!


El lenguaje C fue desarrollado en Bell Laboratories. Una de las grandes ventajas del lenguaje C es ser estructurado. Se pueden escribir bucles que tienen condiciones de entrada y salida claras y se pueden escribir funciones cuyos argumentos se verifiacan siempre para su completa exactitud.


Su excelente biblioteca estándar de funciones convierte a C en uno de los mejores lenguajes de programación que los profesionales informaticos pueden utilizar


Quizás te hayas preguntado qué pasa cuando escribimos expresiones numéricas en las que no todos los operandos son del mismo tipo. Por ejemplo:
char n; int a, b, c, d; float r, s, t; ... a = 10; b = 100; r = 1000; c = a + b; s = r + a; d = r + b; d = n + a + r; t = r + a - s + c; ... 


En estos casos, cuando los operandos de cada operación binaria asociados a un operador son de distinto tipo, el compilador los convierte a un tipo común. Existen reglas que rigen estas conversiones, y aunque pueden cambiar ligeramente de un compilador a otro, en general serán más o menos así:
Cualquier tipo entero pequeño como char o short es convertido a int o unsigned int. En este punto cualquier pareja de operandos será int (con o sin signo), long, long long, double, float o long double.
Si un operando es de tipo long double, el otro se convertirá a long double.
Si un operando es de tipo double, el otro se convertirá a double.
Si un operando es de tipo float, el otro se convertirá a float.
Si un operando es de tipo unsigned long long, el otro se convertirá a unsigned long long.
Si un operando es de tipo long long, el otro se convertirá a long long.
Si un operando es de tipo unsigned long, el otro se convertirá a unsigned long.
Si un operando es de tipo long, el otro se convertirá a long.
Si un operando es de tipo unsigned int, el otro se convertirá a unsigned int.
Llegados a este punto ambos operandos son int.

Veamos ahora el ejemplo:

c = a + b; caso 10, ambas son int.

s = r + a; caso 4, a se convierte a float.

d = r + b; caso 4, b se convierte a float.

d = n + a + r; caso 1, n se convierte a int, la operación resultante corresponde al caso 4, el resultado (n+a) se convierte a float.

t = r + a - s + c; caso 4, a se convierte a float, caso 4 (r+a) y s son float, caso 4, c se convierte a float.

También se aplica conversión de tipos en las asignaciones, cuando la variable receptora es de distinto tipo que el resultado de la expresión de la derecha.

En el caso de las asignaciones, cuando la conversión no implica pérdida de precisión, se aplican las mismas reglas que para los operandos, estas conversiones se conocen también como promoción de tipos. Cuando hay pérdida de precisión, las conversiones se conocen como democión de tipos. El compilador normalmente emite un aviso o warning, cuando se hace una democión implícita, es decir cuando hay una democión automática.

En el caso de los ejemplos 3 y 4, es eso precisamente lo que ocurre, ya que estamos asignando expresiones de tipo float a variables de tipo int.

Sigue aprendiendo de C++ en el siguiente enlace



No hay comentarios:

Publicar un comentario

Entradas populares