Wat is typecasting in C?
Typecasting is het converteren van het ene gegevenstype naar het andere. Het wordt ook wel dataconversie of typeconversie genoemd. Het is een van de belangrijke concepten die in 'C'-programmering worden geïntroduceerd.
'C'-programmering biedt twee soorten gietbewerkingen:
- Impliciet type casten
- Expliciet type casten
Impliciet type casten
Impliciet type casten betekent conversie van gegevenstypen zonder de oorspronkelijke betekenis te verliezen. Dit type typecasting is essentieel als u datatypen wilt wijzigen zonder de significantie van de waarden die in de variabele zijn opgeslagen te wijzigen.
Impliciete typeconversie vindt automatisch plaats wanneer een waarde wordt gekopieerd naar het compatibele gegevenstype. Bij de conversie worden strikte regels voor typeconversie toegepast. Als de operanden van twee verschillende datatypes zijn, dan wordt een operand met een lager datatype automatisch geconverteerd naar een hoger datatype. Dit type conversie is te zien in het volgende voorbeeld.
#includeint main(){short a=10; //initializing variable of short data typeint b; //declaring int variableb=a; //implicit type castingprintf("%d\n",a);printf("%d\n",b);}
Uitvoer
1010
- In het gegeven voorbeeld hebben we een variabele van een kort gegevenstype gedeclareerd met de waarde geïnitialiseerd als 10.
- Op de tweede regel hebben we een variabele van een int-gegevenstype gedeclareerd.
- Op de derde regel hebben we de waarde van variabele s toegewezen aan de variabele a. Op de derde regel wordt een impliciete conversie uitgevoerd als de waarde van variabele s die van het korte gegevenstype is, wordt gekopieerd naar de variabele a die van het gegevenstype int is.
Teken omzetten in Int
Beschouw het voorbeeld van het toevoegen van een in ASCII gedecodeerd teken met een geheel getal:
#includemain() {int number = 1;char character = 'k'; /*ASCII value is 107 */int sum;sum = number + character;printf("Value of sum : %d\n", sum );}
Uitgang:
Value of sum : 108
Hier heeft de compiler een integer-promotie gedaan door de waarde van 'k' naar ASCII te converteren voordat de feitelijke optelbewerking werd uitgevoerd.
Rekenkundige conversiehiërarchie
De compiler gaat eerst verder met het promoveren van een karakter tot een geheel getal. Als de operanden nog steeds verschillende gegevenstypen hebben, worden ze geconverteerd naar het hoogste gegevenstype dat wordt weergegeven in het volgende hiërarchiegrafiek:
Beschouw het volgende voorbeeld om het concept te begrijpen:
#includemain() {int num = 13;char c = 'k'; /* ASCII value is 107 */float sum;sum = num + c;printf("sum = %f\n", sum );}
Uitgang:
sum = 120.000000
Allereerst wordt de variabele c geconverteerd naar integer, maar de compiler zet num en c om in "float" en voegt ze toe om een 'float'-resultaat te produceren.
Belangrijke punten over impliciete conversies
- Impliciete typeconversie wordt ook wel standaard typeconversie genoemd. We hebben geen trefwoord of speciale uitspraken nodig bij het impliciet casten van typen.
- Het omzetten van een kleiner gegevenstype naar een groter gegevenstype wordt ook wel typepromotie genoemd . In het bovenstaande voorbeeld kunnen we ook zeggen dat de waarde van s wordt gepromoveerd tot het type integer.
- De impliciete typeconversie gebeurt altijd met de compatibele datatypes.
We kunnen geen impliciete type-casting uitvoeren op de gegevenstypen die niet compatibel zijn met elkaar, zoals:
- Het omzetten van float naar een int zal het breukgedeelte afkappen, waardoor de betekenis van de waarde verloren gaat.
- Als u dubbel omzet in zwevend, worden de cijfers naar boven afgerond.
- Het converteren van long int naar int zal leiden tot het laten vallen van overtollige bits van hoge orde.
In alle bovenstaande gevallen, wanneer we de gegevenstypen converteren, verliest de waarde zijn betekenis. Over het algemeen wordt het verlies van betekenis van de waarde gewaarschuwd door de compiler.
'C'-programmering biedt een andere manier van typecasting, namelijk expliciet typen.
Expliciet type casten
Bij impliciete typeconversie wordt het gegevenstype automatisch geconverteerd. Er zijn enkele scenario's waarin we typeconversie moeten forceren. Stel dat we een variabele div hebben die de verdeling opslaat van twee operanden die worden gedeclareerd als een int-gegevenstype.
int result, var1=10, var2=3;result=var1/var2;
In dit geval zal, na de deling uitgevoerd op variabelen var1 en var2, het resultaat opgeslagen in de variabele "resultaat" een integer formaat hebben. Telkens wanneer dit gebeurt, verliest de waarde die is opgeslagen in de variabele "resultaat" zijn betekenis omdat het geen rekening houdt met het breukgedeelte dat normaal wordt verkregen bij het delen van twee getallen.
Om de typeconversie in dergelijke situaties af te dwingen, gebruiken we expliciete type-casting.
Het vereist een type casting-operator. De algemene syntaxis voor het casten van typen is als volgt:
(type-name) expression
Hier,
- De typenaam is het standaard 'C'-taalgegevenstype.
- Een uitdrukking kan een constante, een variabele of een werkelijke uitdrukking zijn.
Laten we een programma schrijven om de implementatie van expliciet type-casting in 'C' te demonstreren.
#includeint main(){float a = 1.2;//int b = a; //Compiler will throw an error for thisint b = (int)a + 1;printf("Value of a is %f\n", a);printf("Value of b is %d\n",b);return 0;}
Uitgang:
Value of a is 1.200000Value of b is 2
- We hebben een variabele 'a' van het type float geïnitialiseerd.
- Vervolgens hebben we nog een variabele 'b' van het gegevenstype integer. Aangezien de variabele 'a' en 'b' van verschillende gegevenstypen zijn, staat 'C' het gebruik van een dergelijke uitdrukking niet toe en zal er een fout optreden. In sommige versies van 'C' wordt de uitdrukking geëvalueerd, maar het resultaat is niet gewenst.
- Om dergelijke situaties te vermijden, hebben we de variabele 'a' van het type float getypt. Door expliciete methoden voor het casten van typen te gebruiken, hebben we float met succes omgezet in datatype integer.
- We hebben de waarde van 'a' gedrukt die nog steeds een vlotter is
- Na typecasting is het resultaat altijd een geheel getal 'b'.
Op deze manier kunnen we expliciet type-casting implementeren in 'C'-programmering.
Overzicht
- Typecasting wordt ook wel typeconversie genoemd
- Het betekent het ene gegevenstype naar het andere converteren.
- Het omzetten van een kleiner gegevenstype naar een groter gegevenstype wordt ook wel typepromotie genoemd.
- 'C' biedt een impliciete en expliciete manier van typeconversie.
- Impliciete typeconversie werkt automatisch wanneer het compatibele gegevenstype wordt gevonden.
- Voor expliciete typeconversie is een operator voor het casten van typen vereist.
Houd rekening met de volgende regels voor het programmeren bij het omgaan met verschillende gegevenstypen om gegevensverlies te voorkomen:
- Gehele getallen moeten worden geconverteerd naar zwevend.
- Float-typen moeten worden geconverteerd naar double.
- Karaktertypen moeten worden geconverteerd naar gehele getallen.