Articles

C-type Casting

annoncer

konvertering af en datatype til en anden er kendt som type casting eller type-konvertering. For eksempel, hvis du vil gemme en ‘lang’ værdi i et simpelt heltal, kan du skrive cast ‘lang’ til ‘int’. Du kan konvertere værdierne fra en type til en anden eksplicit ved hjælp af cast −operatoren som følger-

(type_name) expression

overvej følgende eksempel, hvor cast −operatoren får opdelingen af en heltalsvariabel med en anden til at udføres som en flydende punktoperation −

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

når ovenstående kode kompileres og udføres, producerer den følgende resultat –

Value of mean : 3.400000

det skal her bemærkes, at cast-operatøren har forrang for division, så værdien af summen konverteres først til type dobbelt og endelig bliver den divideret med optælling giver en dobbelt værdi.

type konverteringer kan være implicit, som udføres af kompilatoren automatisk, eller det kan specificeres eksplicit ved brug af cast-operatøren. Det betragtes som god programmeringspraksis at bruge cast-operatøren, når typekonverteringer er nødvendige.

Integer Promotion

Integer promotion er den proces, hvormed værdier af heltalstype “mindre” end int eller usigneret int konverteres enten til int eller usigneret int. Overvej et eksempel på at tilføje et tegn med et heltal −

#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 );}

når ovenstående kode er kompileret og udført, producerer den følgende resultat −

Value of sum : 116

Her er værdien af summen 116, fordi kompilatoren laver heltalskampagne og konverterer værdien af ‘c’ til ASCII, før den faktiske tilføjelsesoperation udføres.

sædvanlig aritmetisk konvertering

de sædvanlige aritmetiske konverteringer udføres implicit for at kaste deres værdier til en fælles type. Compileren udfører først heltal forfremmelse; hvis operanderne stadig har forskellige typer, konverteres de til den type, der vises højest i følgende hierarki −

de sædvanlige aritmetiske konverteringer udføres ikke for tildelingsoperatørerne eller for de logiske operatorer && og ||. Lad os tage følgende eksempel for at forstå konceptet −

#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 );}

når ovenstående kode er kompileret og udført, producerer den følgende resultat −

Value of sum : 116.000000

Her er det nemt at forstå, at første c bliver konverteret til heltal, men da den endelige værdi er dobbelt, gælder sædvanlig aritmetisk konvertering, og kompilatoren konverterer i og c til ‘float’ og tilføjer dem giver et ‘float’ resultat.

reklamer