Nella guida precedente abbiamo imparato i principali modi con cui si possono assegnare dei valori alle variabili, venendo a conoscenza del delicato problema dell’incompatibilità di tipi diversi. Abbiamo visto come, per esempio, attribuire un carattere ad una variabile intera è un grave errore, così come assegnare una variabile float ad una variabile int, comporta la perdita della parte decimale del numero. A questo proposito esiste un procedimento, molto semplice, che consente di trasformare un valore di un certo tipo in un valore di un altro tipo, questa operazione prende il nome di conversione di tipo.
La conversione di tipo, è un’operazione molto comune in tutti i linguaggi, anche se spesso il programmatore non se ne rende conto. Questo perché molte volte la conversione di tipo viene fatta automaticamente dal programma, senza che il programmatore ne sia realmente a conoscenza (talvolta creando anche innumerevoli inconveniente). Questo tipo di conversione prende il nome di conversione implicita. Analizziamo il seguente codice per capire meglio di cosa si tratta:
#include <stdio.h> main(){ int x = 8; float y = 7.12; x = y; printf("%d", x); }
Il programma stà attribuendo un valore decimale ad una variabile intera. Quale sarà l’output che vedremo a video?
Il programma effettua implicitamente una conversione di tipo, trasformando il numero decimale 7,12 in un numero intero, con la conseguente eliminazione delle cifre dopo la virgola. Il valore che stamperà a video sarà: 7.
Vediamo un altro esempio:
#include <stdio.h> main(){ int x = 8; float y = 7.12; y = x; printf("%d", y); }
In questo caso invece, vogliamo attribuire un valore intero ad un variabile decimale. Il programma dovrà effettuare una conversione implicita, trasformando il numero intero 8 in un numero decimale. Il valore che vedremo a video sarà il numero 8, con l’aggiunta della virgola e delle cifre decimali: 8.00
Il linguaggio C consente al programmatore stesso di richiedere le conversioni di tipo: tali conversioni prendono il nome di conversioni esplicite o cast. L’operazione di conversione esplicita si chiama casting.
L’operazione di casting ha la seguente sintassi:
variabile1 = (nuovo tipo d dato) variabile2;
dove in variabile1 dovremo mettere il nome della variabile che conterrà il risultato del casting e tra le parentesi, a destra dell’uguale, dovremo mettere il tipo di dato nel quale vorremmo convertire il valore contenuto nella variabile2. Facciamo un esempio concreto:
int x = 8; float y = 7.12; x = (int) b;
stiamo dicendo al programma che vogliamo mettere nella variabile intera x solamente la parte intera del numero contenuto nella variabile y, scartando la parte decimale. Il risultato sarà quindi 7.
#include <stdio.h> int main(){ int x=10; int y=4; float z =1.1; float w; w=x/y - z; printf("%f",w); }
#include <stdio.h>
int main(){
int x=10;
int y=4;
float z =1.1;
float w;
w=(float)x/y - z;
printf("%f",w);
}
Il programma di sinistra svolge i seguenti calcoli prima di attribuire il valore a w:
- divisione dei due interi x ( valore 10 ) e y ( valore4 ): 10/4 = 2 scarta la parte decimale del numero;
- sottrae al risultato della divisione ( valore 2 ) la variabile float z ( valore 1.1 ): 2 – 1.1 = 0.9.
Il valore che vedremo a video sarà quindi la variabile decimale w contenente il valore 0.9.
Il programma a destra invece effettua il casting della divisione dei due numeri interi:
- casting a float della divisione dei due interi x (valore 10) e y (valore 4 ): 10/4 = 2.5 questa volta mantiene la parte decimale a causa del cast(float);
- sottrae al risultato della divisione ( valore 2 ) la variabile float z (valore 1.1 ): 2.5 – 1.1 = 1.4.
Il valore che vedremo a video sarà quindi la variabile decimale w contenente il valore 1.4. Abbiamo quindi appena capito come in alcune circostanze la presenza del cast sia indispensabile per una maggiore precisione del risultato.
Lasciate un like alla nostra pagina Facebook per rimanere sempre aggiornati. 😉
Staff Melabu
Interessantissimo !