Linguaggio C - Conversioni di tipo

Generalita'

In C sono possibili due modi di conversione di tipo fra i dati:
o Conversioni di tipo implicite
o Conversioni di tipo esplicite (casting)

Le conversioni di tipo hano luogo quando si definiscono 2 variabili di tipologia differente e si eseguono assegnamenti fra loro (es.: si assegna ad una variabile float, un valore risultante da una espressione fra int), oppure sono facenti parte della stessa espressione (es.: somma di un operando float con un operando int).

Esempio:

  ...
  int a = 10;
  float b, c;

  b = a;        / b e' float, a e' int */

  ...

  b = 5.0;

  c = a*b;      /* moltiplicazione fra due operandi di tipo differente */
    

Conversioni di tipo implicite

Durante la valutazione di una espressione, gli operandi riferiti ad uno stesso operatore vengonmo convertiti ad un tipo comune in base alle regole seguenti: [vedi "Il linguaggio C" di B.Kernighan e D.Ritchie]

o Se uno degli operandi e' long double, l'altro viene convertito in un long double.
o Altrimenti, se uno degli operandi e' double, l'altro viene convertito in un double.
o Altrimenti, se uno degli operandi e' float, l'altro viene convertito in un float.
o Altrimenti su entrambi gli operandi viene eseguita la trasformazione degli interi:
o Se uno degli operandi e' unsigned long int, anche l'altro diventa unsigned long int
o Altrimenti, se uno degli operandi e' long int e l'altro e' unsigned int, la convestione dipende dall'implementazione del compilatore in funzione dell'architettura dell'elaboratore.
Se il long int puo' rappresentare tutti i valori di un unsigned int, quest'ultimo operando viene convertito in long int; altrimenti entrambi vengono convertiti in unsigned long int.
o Altrimenti, se uno degli operandi e' long int, anche l'altro viene convertito in long int
o Altrimenti, se uno degli operandi e' unsigned int, anche l'altro viene convertito in unsigned int
o Altrimenti, entrambi gli operandi sono convertiti al tipo int.

Nel caso di assegnamento ad una variabile del risultato di una espressione (il cui tipo e' determinato dalle regole sopra riportate), sono possibili alcune conversioni di seguito riportate: [vedi "Fondamenti di Informatica II" di G.Bellavia, A.Corradi, L.Leonardi]

o char -> int, short int, long int
o int -> char (possibilita' di troncamento), short int (possibilita' di troncamento), long int, float, double, unsigned int
o short int -> char (possibilita' di troncamento), int, long int, float, double, unsigned int
o long int -> char (possibilita' di troncamento), short int (possibilita' di troncamento), int (possibilita' di troncamento), float, double, unsigned int
o float -> short int (possibilita' di overflow), int (possibilita' di overflow), long int (possibilita' di overflow), double
o double -> short int (possibilita' di overflow), int (possibilita' di overflow), long int (possibilita' di overflow), float

Conversioni di tipo esplicite (casting)

In C e' possibilie forzare il tipaggio di una espressione effettuando un operazione di casting.
Il casting e' un operatore unario (cioe' interviene su un unico operando) ed e' costituito dal nome del nuovo tipo scritto fra parentesi tonde. Per esempio: (int)

Vedi un esempio di casting


Indice-C Indice linguaggio C
At Home Umberto Zappi Home Page