Casting di tipi in C: conversione di tipi, implicita, esplicita con esempio
Cos'è il typecasting in C?
Il typecasting consiste nel convertire un tipo di dati in un altro. Viene anche chiamata conversione dei dati o conversione del tipo in linguaggio C. È uno dei concetti importanti introdotti nella programmazione "C".
La programmazione 'C' prevede due tipi di operazioni di casting del tipo:
- Casting di tipo implicito
- Casting di tipo esplicito
Casting di tipo implicito
Il cast implicito del tipo significa la conversione dei tipi di dati senza perdere il significato originale. Questo tipo di typecasting è essenziale quando si desidera modificare i tipi di dati senza cambiando il significato dei valori memorizzati all'interno del file variabile.
La conversione implicita di tipo in C avviene automaticamente quando un valore viene copiato nel suo tipo di dati compatibile. Durante la conversione, vengono applicate rigide regole per la conversione di tipo. Se gli operandi sono di due tipi di dati diversi, un operando con un tipo di dati inferiore viene automaticamente convertito in un tipo di dati superiore. Questo tipo di conversione di tipo può essere visto nel seguente esempio.
#include<stdio.h> int main(){ short a=10; //initializing variable of short data type int b; //declaring int variable b=a; //implicit type casting printf("%d\n",a); printf("%d\n",b); }
Produzione:
10 10
- Nell'esempio fornito, abbiamo dichiarato una variabile di tipo dati breve con valore inizializzato come 10.
- Nella seconda riga abbiamo dichiarato una variabile di tipo dati int.
- Nella terza riga abbiamo assegnato il valore della variabile s alla variabile a. Sulla terza riga la conversione di tipo implicita viene eseguita poiché il valore della variabile s che è di tipo dati short viene copiato nella variabile a che è di tipo dati int.
Conversione del carattere in int
Consideriamo l'esempio di aggiunta di un carattere decodificato in ASCII con un numero intero:
#include <stdio.h> main() { int number = 1; char character = 'k'; /*ASCII value is 107 */ int sum; sum = number + character; printf("Value of sum : %d\n", sum ); }
Produzione:
Value of sum : 108
In questo caso, il compilatore ha effettuato una promozione di intero convertendo il valore di 'k' in ASCII prima di eseguire l'operazione di addizione effettiva.
Gerarchia di conversione aritmetica
Il compilatore procede prima con la promozione di un carattere a un intero. Se gli operandi hanno ancora tipi di dati diversi, vengono convertiti nel tipo di dati più elevato che appare nel seguente grafico gerarchico:
Per comprendere il concetto, prendiamo in considerazione il seguente esempio:
#include <stdio.h> main() { int num = 13; char c = 'k'; /* ASCII value is 107 */ float sum; sum = num + c; printf("sum = %f\n", sum );}
Produzione:
sum = 120.000000
Prima di tutto, la variabile c viene convertita in numero intero, ma il compilatore la converte num e c in "float" e li aggiunge per produrre un risultato "float".
Punti importanti sulle conversioni implicite
- Il tipo implicito di conversione del tipo è anche chiamato conversione del tipo standard. Non richiediamo alcuna parola chiave o istruzioni speciali nel casting di tipo implicito.
- La conversione da un tipo di dati più piccolo a un tipo di dati più grande viene anche chiamata as tipo promozioneNell'esempio precedente, possiamo anche dire che il valore di s viene promosso al tipo intero.
- La conversione implicita del tipo avviene sempre con i tipi di dati compatibili.
Non possiamo eseguire il cast di tipo implicito sui tipi di dati che non sono compatibili tra loro come:
- La conversione di float in int troncerà la parte della frazione perdendo quindi il significato del valore.
- La conversione da double a float arrotonda le cifre per eccesso.
- La conversione di long int in int causerà la perdita di bit di ordine elevato in eccesso.
In tutti i casi precedenti, quando convertiamo i tipi di dati, il valore perderà il suo significato. Generalmente la perdita di significato del valore viene avvisata dal compilatore.
Programmazione "C". fornisce un altro modo di typecasting che è il cast esplicito del tipo.
Casting di tipo esplicito
Nella conversione implicita del tipo, il tipo di dati viene convertito automaticamente. Esistono alcuni scenari in cui potremmo dover forzare la conversione del tipo. Supponiamo di avere una variabile div che memorizza la divisione di due operandi dichiarati come tipo di dati int.
int result, var1=10, var2=3; result=var1/var2;
In questo caso, dopo la divisione effettuata sulle variabili var1 e var2 il risultato memorizzato nella variabile “result” sarà in formato intero. Ogni volta che ciò accade, il valore memorizzato nella variabile “risultato” perde di significato perché non considera la parte frazionaria che normalmente si ottiene nella divisione di due numeri.
Per forzare la conversione del tipo in tali situazioni, utilizziamo il cast esplicito del tipo.
Richiede un operatore di casting del tipo. La sintassi generale per le operazioni di casting del tipo è la seguente:
(type-name) expression
Qui,
- Il nome del tipo è il tipo di dati standard del linguaggio "C".
- Un'espressione può essere una costante, una variabile o un'espressione reale.
Scriviamo un programma per dimostrare come eseguire il typecasting in C con il typecasting esplicito.
#include<stdio.h> int main() { float a = 1.2; //int b = a; //Compiler will throw an error for this int b = (int)a + 1; printf("Value of a is %f\n", a); printf("Value of b is %d\n",b); return 0; }
Produzione:
Value of a is 1.200000 Value of b is 2
- Abbiamo inizializzato una variabile 'a' di tipo float.
- Successivamente, abbiamo un'altra variabile "b" di tipo dati intero. Poiché le variabili "a" e "b" sono di tipi di dati diversi, "C" non consentirà l'uso di tale espressione e genererà un errore. In alcune versioni di "C", l'espressione verrà valutata ma il risultato non sarà quello desiderato.
- Per evitare tali situazioni, abbiamo typecast la variabile 'a' di tipo float. Utilizzando metodi di casting del tipo esplicito, abbiamo convertito con successo il float nel tipo di dati intero.
- Abbiamo stampato il valore di "a" che è ancora un float
- Dopo la conversione del tipo, il risultato sarà sempre un numero intero "b".
In questo modo, possiamo implementare il cast esplicito del tipo nella programmazione C.
Sintesi
- Il typecasting è anche chiamato conversione del tipo
- Significa convertire un tipo di dati in un altro.
- La conversione di un tipo di dati più piccolo in uno più grande è anche detta promozione del tipo.
- Esistono due tipi di conversione di tipo: conversione di tipo implicita ed esplicita in C.
- La conversione implicita del tipo funziona automaticamente quando viene trovato il tipo di dati compatibile.
- La conversione esplicita del tipo richiede un operatore di casting del tipo.
Tenere a mente le seguenti regole per la pratica di programmazione quando si ha a che fare con diversi tipi di dati per evitare la perdita di dati:
- I tipi interi dovrebbero essere convertiti in float.
- I tipi float devono essere convertiti in double.
- I tipi di carattere devono essere convertiti in numeri interi.