C - Tipo Casting

La conversione di un tipo di dati in un altro è nota come casting del tipo o conversione del tipo. Ad esempio, se vuoi memorizzare un valore "long" in un numero intero semplice, puoi digitare cast "long" in "int". È possibile convertire i valori da un tipo a un altro in modo esplicito utilizzando l'estensionecast operator come segue -

(type_name) expression

Considera il seguente esempio in cui l'operatore cast fa sì che la divisione di una variabile intera per un'altra venga eseguita come operazione in virgola mobile:

#include <stdio.h>

main() {

   int sum = 17, count = 5;
   double mean;

   mean = (double) sum / count;
   printf("Value of mean : %f\n", mean );
}

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

Value of mean : 3.400000

Va notato qui che l'operatore cast ha la precedenza sulla divisione, quindi il valore di sum viene prima convertito in tipo double e infine viene diviso per conteggio ottenendo un valore doppio.

Le conversioni di tipo possono essere implicite che vengono eseguite automaticamente dal compilatore, oppure possono essere specificate esplicitamente tramite l'uso del cast operator. È considerata una buona pratica di programmazione utilizzare l'operatore cast ogni volta che sono necessarie conversioni di tipo.

Promozione intera

La promozione di numeri interi è il processo mediante il quale i valori di tipo intero "minori" di int o unsigned int vengono convertiti in int o unsigned int. Considera un esempio di aggiunta di un carattere con un numero intero:

#include <stdio.h>

main() {

   int  i = 17;
   char c = 'c'; /* ascii value is 99 */
   int sum;

   sum = i + c;
   printf("Value of sum : %d\n", sum );
}

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

Value of sum : 116

Qui, il valore di sum è 116 perché il compilatore sta eseguendo la promozione di interi e convertendo il valore di "c" in ASCII prima di eseguire l'effettiva operazione di addizione.

Conversione aritmetica usuale

Il usual arithmetic conversionsvengono implicitamente eseguiti per eseguire il cast dei loro valori su un tipo comune. Il compilatore esegue prima la promozione del numero intero ; se gli operandi hanno ancora tipi diversi, vengono convertiti nel tipo che appare più in alto nella seguente gerarchia:

Le normali conversioni aritmetiche non vengono eseguite per gli operatori di assegnazione, né per gli operatori logici && e ||. Prendiamo il seguente esempio per comprendere il concetto:

#include <stdio.h>

main() {

   int  i = 17;
   char c = 'c'; /* ascii value is 99 */
   float sum;

   sum = i + c;
   printf("Value of sum : %f\n", sum );
}

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

Value of sum : 116.000000

Qui, è semplice capire che il primo c viene convertito in intero, ma poiché il valore finale è doppio, si applica la normale conversione aritmetica e il compilatore converte i e c in 'float' e li aggiunge producendo un risultato 'float'.