Typecasting in C: typeconversie, impliciet, expliciet met voorbeeld

Wat is typecasting in C?

Typecasting is het omzetten van een datatype in een ander. Het wordt ook wel dataconversie of typeconversie genoemd in de C-taal. Het is een van de belangrijke concepten die in 'C'-programmering worden geïntroduceerd.

'C'-programmering biedt twee soorten typecastingbewerkingen:

  1. Impliciet type casten
  2. Expliciete typecasting

Impliciet type casten

Impliciete typecasting betekent conversie van gegevenstypen zonder de oorspronkelijke betekenis te verliezen. Dit type typecasting is essentieel als u gegevenstypen wilt wijzigen zonder het veranderen van de betekenis van de waarden die zijn opgeslagen in de variabele.

Impliciete typeconversie in C gebeurt automatisch wanneer een waarde wordt gekopieerd naar het compatibele gegevenstype. Tijdens conversie worden strikte regels voor typeconversie toegepast. Als de operanden van twee verschillende gegevenstypen zijn, wordt een operand met een lager gegevenstype automatisch geconverteerd naar een hoger gegevenstype. Dit type typeconversie is te zien in het volgende voorbeeld.

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

Output:

10
10

Impliciet type casten

  1. In het gegeven voorbeeld hebben we een variabele van het korte gegevenstype gedeclareerd met de waarde geïnitialiseerd als 10.
  2. Op de tweede regel hebben we een variabele van het gegevenstype int gedeclareerd.
  3. Op de derde regel hebben we de waarde van variabele s aan de variabele a toegekend. Op de derde regel wordt impliciete typeconversie uitgevoerd terwijl 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 naar Int

Beschouw het voorbeeld van het toevoegen van een teken dat in ASCII is gedecodeerd met een geheel getal:

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

Output:

 Value of sum : 108

Hier heeft de compiler een integerpromotie uitgevoerd door de waarde van 'k' naar ASCII te converteren voordat de daadwerkelijke optelbewerking werd uitgevoerd.

Rekenkundige conversiehiërarchie

De compiler gaat eerst verder met het promoveren van een teken naar een geheel getal. Als de operanden nog steeds verschillende gegevenstypen hebben, worden ze geconverteerd naar het hoogste gegevenstype dat in de volgende hiërarchiegrafiek voorkomt:

Impliciet type casten
Rekenkundige conversiehiërarchie

Bekijk het volgende voorbeeld om het concept te begrijpen:

#include <stdio.h>
main() {
   int  num = 13;
   char c = 'k'; /* ASCII value is 107 */
   float sum;
   sum = num + c;
   printf("sum = %f\n", sum );}

Output:

 sum = 120.000000

Allereerst wordt de c-variabele geconverteerd naar een geheel getal, maar de compiler converteert num en c in “float” en voegt ze toe om een ​​'float'-resultaat te verkrijgen.

Belangrijke punten over impliciete conversies

  • Impliciete typetypeconversie wordt ook wel standaardtypeconversie genoemd. Bij impliciete typecasting hebben we geen trefwoorden of speciale uitspraken nodig.
  • Het converteren van een kleiner gegevenstype naar een groter gegevenstype wordt ook wel as genoemd type promotieIn het bovenstaande voorbeeld kunnen we ook zeggen dat de waarde van s wordt gepromoveerd tot het type integer.
  • De impliciete typeconversie vindt altijd plaats met de compatibele gegevenstypen.

We kunnen geen impliciete typecasting uitvoeren op gegevenstypen die niet compatibel zijn met elkaar, zoals:

  1. Als u float naar een int converteert, wordt het breukgedeelte afgekapt, waardoor de betekenis van de waarde verloren gaat.
  2. Als u double naar float converteert, worden de cijfers naar boven afgerond.
  3. Het omzetten van lange int naar int zal leiden tot het wegvallen van overtollige bits van hoge orde.

In alle bovenstaande gevallen verliest de waarde zijn betekenis wanneer we de gegevenstypen converteren. Over het algemeen wordt het verlies van betekenis van de waarde gewaarschuwd door de compiler.

'C'-programmering biedt een andere manier van typecasting, namelijk expliciete typecasting.

Expliciete typecasting

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 deling van twee operanden opslaat die zijn gedeclareerd als een int-gegevenstype.

 int result, var1=10, var2=3;
result=var1/var2;

In dit geval zal het resultaat dat is opgeslagen in de variabele "result" na de deling uitgevoerd op variabelen var1 en var2 in een geheel getalformaat zijn. Wanneer dit gebeurt, verliest de waarde die is opgeslagen in de variabele "result" zijn betekenis omdat het geen rekening houdt met het breukdeel dat normaal gesproken wordt verkregen bij de deling van twee getallen.

Om de typeconversie in dergelijke situaties te forceren, gebruiken we expliciete typecasting.

Hiervoor is een type casting operator nodig. De algemene syntaxis voor type casting operaties is als volgt:

(type-name) expression

Hier

  • De typenaam is het standaardgegevenstype in de C-taal.
  • Een expressie kan een constante, een variabele of een feitelijke expressie zijn.

Laten we een programma schrijven om te demonstreren hoe je in C kunt typen met expliciete type-casting.

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

Output:

Value of a is 1.200000
Value of b is 2

Expliciete typecasting

  1. We hebben een variabele 'a' van het type float geïnitialiseerd.
  2. Vervolgens hebben we nog een variabele 'b' van het gegevenstype geheel getal. Omdat de variabelen 'a' en 'b' van verschillende gegevenstypen zijn, staat 'C' het gebruik van een dergelijke expressie niet toe en zal dit een fout opleveren. In sommige versies van 'C' wordt de expressie geëvalueerd, maar is het resultaat niet gewenst.
  3. Om dergelijke situaties te voorkomen, hebben we de variabele 'a' van het type float getypeerd. Door expliciete type casting-methoden te gebruiken, hebben we met succes float omgezet in datatype integer.
  4. We hebben de waarde van 'a' afgedrukt, wat nog steeds een float is
  5. Na typecasting zal het resultaat altijd een geheel getal 'b' zijn.

Op deze manier kunnen we expliciete typecasting implementeren in C-programmering.

Samenvatting

  • Typecasting wordt ook wel typeconversie genoemd
  • Het betekent het converteren van het ene gegevenstype naar het andere.
  • Het omzetten van een kleiner gegevenstype naar een groter gegevenstype wordt ook wel typepromotie genoemd.
  • Er zijn twee soorten typeconversie: impliciete en expliciete typeconversie in C.
  • Impliciete typeconversie wordt automatisch uitgevoerd wanneer het compatibele gegevenstype is gevonden.
  • Voor expliciete typeconversie is een typecastingoperator nodig.

Houd bij het werken met verschillende gegevenstypen rekening met de volgende programmeerregels om gegevensverlies te voorkomen:

  • Typen gehele getallen moeten worden geconverteerd naar zwevend.
  • Float-typen moeten worden omgezet naar double.
  • Tekentypen moeten worden geconverteerd naar geheel getal.