Conversión entre tipos de datos

Cuando C++ tiene que evaluar una expresión en la que intervienen operandos de diferentes tipos, primero convierte, sólo para realizar las operaciones solicitadas, los valores de los operandos al tipo del operador cuya precisión sea más alta. Cuando se trate de una asignación, convierte el valor de la derecha al tipo de variable de la izquierda siempre que no haya pérdida de información (C++ avisará de tal hecho).

Veamos las reglas que se exponen a continuación se aplicaran en el orden indicado, para cada operación binaria perteneciente a una expresión (dos operandos y un operador), siguiendo el orden de evaluación expuesto en la tabla del tema Prioridad y orden de evaluación.

  1. Si un operador es de tipo long double, el otro operador es convertido a tipo long double.
  2. Si un operador es de tipo double, el otro operador es convertido a tipo double.
  3. Si un operador es de tipo float, el otro operador es convertido a tipo float.
  4. Un char o un short, con o sin signo, se convierten a un int, si el tipo int puede representar todos los valores del tipo original, o a un unsigned int en caso contrario.
  5. Un wchar_t o un tipo enumerado se convierte al primero de los siguientes tipos que pueda representar todos los valores: int, unsigned int, long o unsigned long.
  6. Un bool es convertido en un int; false se convierte en 0 y true en 1.
  7. Si un operando es de tipo unsigned long, el otro operando es convertido al tipo long.
  8. Si un operando es de tipo long, el otro operando es convertido a tipo long.
  9. Si un operando es de tipo unsigned int, el otro operando es convertido a tipo unsigned int.

Veamos un ejemplo

plantilla

Cuando el compilador c++ requiere realizar una conversión y no puede, o bien detecta que se incurre en una pérdida de precisión, avisará de tal acontecimiento. En estos casos, lo más normal es resolver la situación una conversión explícita. No obstante, la conversión explícita de tipos debe evitarse siempre que se pueda porque siempre que la utilicemos anularemos el sistema de chequeo de tipos de C++.

C++ permite la conversión forzada o explícita del tipo de una expresión mediante la construcción llamada cast, que puede expresarse de alguna de las siguientes maneras:

 tipo_conversion_tablaPor ejemplo, el siguiente programa que llamaremos raiz.c escribe la raíz cuadrada de i/2 para i igual a 9. Previamente, para obtener un resultado real de la división i/2 se convierte el entero i a double.

 listado_raiz

Compilando y ejecutando obtendremos:

salida_raiz

 atras2

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s