Articles

C – Type Casting

Advertisements

La conversione di un tipo di dati in un altro è nota come type casting o type-conversion. Ad esempio, se si desidera memorizzare un valore ‘lungo’ in un numero intero semplice, è possibile digitare cast ‘long’ in ‘int’. È possibile convertire i valori da un tipo all’altro in modo esplicito utilizzando l’operatore di cast come segue:

(type_name) expression

si Consideri il seguente esempio in cui l’operatore di cast provoca la divisione di un numero intero variabile da un altro per essere eseguito come un floating point operation −

#include <stdio.h>main() { int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f\n", mean );}

Quando il suddetto codice è compilato ed eseguito, produce il seguente risultato −

Value of mean : 3.400000

Si noti che l’operatore di cast ha la precedenza sulla divisione, in modo che il valore della somma viene convertito al tipo double e, infine, si ottiene diviso per il conteggio producendo un doppio valore.

Le conversioni di tipo possono essere implicite che vengono eseguite automaticamente dal compilatore o possono essere specificate esplicitamente attraverso l’uso dell’operatore cast. È considerata una buona pratica di programmazione utilizzare l’operatore cast ogni volta che sono necessarie conversioni di tipo.

Integer Promotion

Integer promotion è il processo mediante il quale i valori di tipo integer “più piccoli” di int o unsigned int vengono convertiti in int o unsigned int. Si consideri 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 viene compilato ed eseguito, produce il seguente risultato −

Value of sum : 116

Qui, il valore della somma è 116, perché il compilatore esegue intero promozione e la conversione del valore di ” c ” ASCII prima di eseguire l’effettiva operazione di addizione.

Conversione aritmetica usuale

Le conversioni aritmetiche usuali sono implicitamente eseguite per trasmettere i loro valori a un tipo comune. Il compilatore esegue prima la promozione di interi; se gli operandi hanno ancora diversi tipi, poi si sono convertiti al tipo che appare più alto nella gerarchia seguente −

Le solite conversioni aritmetiche non vengono eseguiti per gli operatori di assegnazione, né per gli operatori logici && e ||. Prendiamo il seguente esempio per capire 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 viene compilato ed eseguito, produce il seguente risultato −

Value of sum : 116.000000

Qui, è semplice da capire che c viene convertito in intero, ma il valore finale è il doppio, al solito aritmetica di conversione si applica e il compilatore converte i e c in ‘float’ e li aggiunge, producendo un ‘float’ risultato.

Pubblicità