sábado, 4 de febrero de 2017

Conversión de tipos de datos

Conversión automática de tipos de datos

El lenguaje C permite que en una misma expresión aparezcan diferentes tipos de datos, encargándose el compilador de realizar las operaciones de forma correcta. El compilador del lenguaje C, cuando en una misma expresión aparecen dos o más tipos de datos, convierte todos los operandos al tipo del operando más grande existente de acuerdo con las dos reglas siguientes:

• Todos los char y short int se convierten a int. Todos los float a double.
• Para todo par de operandos, lo siguiente ocurre en secuencia: 

             o Si uno de los operandos es un long double, el otro se  convierte en long double. 
             o Si uno de los operandos es double, el otro se convierte a double. 
             o Si uno de los operandos es long, el otro se convierte a long. o Si uno de los operandos es unsigned, el otro se convierte a unsigned.
 

Después de que el compilador aplique estas reglas de conversión, cada par de operandos será del mismo tipo, y el resultado será del tipo de los operandos. Veamos un ejemplo:

char ch; 
int i; 
float f; 
double d;
 



(  ch  /  i  )  +  (  f  *  d  )  -  (  f  +  i  );   char   int        float double      float  int
Debido a que en la operación existen diferentes tipos se aplica la primera conversión:
ch de char pasa a int. f de float pasa a double.
(  ch  /  i  )  +  (  f  *  d  )  -  (  f  +  i  );   int    int       double double     double  int
Al ser los dos operandos de igual tipo, realizamos la primera operación, (ch / i), y el resultado es de tipo int. De igual forma, para la segunda operación, (f * d), y el resultado es de tipo double.
Para la tercera operación, y dado que las variables no son del mismo tipo, se aplica la segunda regla, convirtiéndose el int en double, realizándose la suma (f + i) como dos datos de tipo double, y siendo por tanto el resultado un double.

 
Ahora procedemos a realizar la suma de los dos primeros resultados (ch / i) + (f * d), como uno de ellos es de tipo int, y el otro de tipo double, el int se convierte en double por la segunda regla, y el resultado es un double.
Y por último, realizamos la resta final, siendo los dos operandos de tipo double y el resultado final, por tanto, de tipo double.
  
Conversión forzada de tipos datos

En C, existe, además, de la conversión automática de tipos de datos, la posibilidad de forzar la conversión de un tipo de datos en otro tipo de datos. Esta conversión de un tipo de datos en otro se llama “casts”, y su sintaxis es:
(tipo)expresión
Su utilidad queda claramente expresada en el ejemplo siguiente:
int a=3,b=2;
float c; 
c=a/b;
La operación asigna a c el valor 1.0 en vez de el valor 1.5, ello se debe a que al ser a y b variables de tipo entero, se realiza una división entre enteros, y el resultado de 3/2 es 1. A continuación ese valor 1 se convierte a un valor en coma flotante para realizar la asignación (valor 1.0), y se asigna a c. Si lo que se desea es que la división se realice en punto flotante, debe escribirse la operación de la siguiente forma:
c=(float)a/b;
Esta conversión forzada obliga a convertir la variable a en float, y entonces, aplicando las reglas de conversión automática de tipos, se realiza la división en coma flotante. Este proceso da lugar a que el resultado de la operación sea 1.5, y dicho valor sea el asignado a la variable c.














 

No hay comentarios.:

Publicar un comentario

Comenta no te cuesta nada