Tip Casting în C: conversie tip, implicit, explicit cu exemplu

Ce este Typecasting în C?

Typecasting înseamnă convertirea unui tip de date în altul. Se mai numește și conversie de date sau conversie de tip în limbajul C. Este unul dintre conceptele importante introduse în programarea „C”.

Programarea „C” oferă două tipuri de operații de turnare de tip:

  1. Casting de tip implicit
  2. Casting de tip explicit

Casting de tip implicit

Turnarea implicită a tipurilor înseamnă conversia tipurilor de date fără a-și pierde sensul inițial. Acest tip de tipare este esențial atunci când doriți să schimbați tipurile de date fără modificarea semnificației valorilor stocate în interiorul variabil.

Conversia implicită a tipului în C are loc automat atunci când o valoare este copiată în tipul său de date compatibil. În timpul conversiei, se aplică reguli stricte pentru conversia tipului. Dacă operanzii sunt de două tipuri de date diferite, atunci un operand care are un tip de date mai mic este convertit automat într-un tip de date mai mare. Acest tip de conversie de tip poate fi văzut în exemplul următor.

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

ieșire:

10
10

Casting de tip implicit

  1. În exemplul dat, am declarat o variabilă de tip de date scurte cu valoarea inițializată ca 10.
  2. Pe a doua linie, am declarat o variabilă de tip de date int.
  3. Pe a treia linie, am atribuit valoarea variabilei s variabilei a. Pe a treia linie conversia tip implicit este efectuată deoarece valoarea variabilei s, care este de tip scurt de date, este copiată în variabila a, care este de tip int.

Conversia caracterului în int

Luați în considerare exemplul de adăugare a unui caracter decodat în ASCII cu un număr întreg:

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

ieșire:

 Value of sum : 108

Aici, compilatorul a făcut o promovare întreg prin conversia valorii lui 'k' în ASCII înainte de a efectua operația de adăugare reală.

Ierarhia de conversie aritmetică

Compilatorul continuă mai întâi cu promovarea unui caracter la un număr întreg. Dacă operanzii au încă tipuri de date diferite, atunci aceștia sunt convertiți la cel mai înalt tip de date care apare în următoarea diagramă ierarhică:

Casting de tip implicit
Ierarhia de conversie aritmetică

Luați în considerare următorul exemplu pentru a înțelege conceptul:

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

ieșire:

 sum = 120.000000

În primul rând, variabila c este convertită în număr întreg, dar compilatorul face conversia o si c în „float” și le adaugă pentru a produce un rezultat „float”.

Puncte importante despre conversiile implicite

  • Tipul implicit de conversie de tip este denumit și conversie de tip standard. Nu avem nevoie de niciun cuvânt cheie sau declarații speciale în castingul tip implicit.
  • Conversia de la un tip de date mai mic în un tip de date mai mare se mai numește și ca tip promovare. În exemplul de mai sus, putem spune, de asemenea, că valoarea lui s este promovată la tipul întreg.
  • Conversia implicită a tipului are loc întotdeauna cu tipurile de date compatibile.

Nu putem efectua turnarea implicită a tipurilor pe tipuri de date care nu sunt compatibile între ele, cum ar fi:

  1. Conversia float într-un int va trunchia partea de fracție, pierzând astfel sensul valorii.
  2. Convertirea dublu în float va rotunji cifrele.
  3. Conversia long int la int va duce la eliminarea excesului de biți de ordin înalt.

În toate cazurile de mai sus, atunci când convertim tipurile de date, valoarea își va pierde sensul. În general, pierderea sensului valorii este avertizată de compilator.

Programare „C”. oferă o altă modalitate de tipare, care este tipul explicit.

Casting de tip explicit

În conversia implicită a tipului, tipul de date este convertit automat. Există câteva scenarii în care ar putea fi nevoiți să forțăm conversia tipului. Să presupunem că avem o variabilă div care stochează împărțirea a doi operanzi care sunt declarați ca tip de date int.

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

În acest caz, după împărțirea efectuată pe variabilele var1 și var2 rezultatul stocat în variabila „rezultat” va fi într-un format întreg. Ori de câte ori se întâmplă acest lucru, valoarea stocată în variabila „rezultat” își pierde sensul deoarece nu ia în considerare partea de fracție care se obține în mod normal la împărțirea a două numere.

Pentru a forța conversia tipului în astfel de situații, folosim casting explicit de tip.

Este nevoie de un operator de turnare de tip. Sintaxa generală pentru operațiunile de turnare a tipului este următoarea:

(type-name) expression

Aici,

  • Numele tipului este tipul de date standard în limbajul „C”.
  • O expresie poate fi o constantă, o variabilă sau o expresie reală.

Haideți să scriem un program pentru a demonstra cum să tipați în C cu tipare explicită.

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

ieșire:

Value of a is 1.200000
Value of b is 2

Casting de tip explicit

  1. Am inițializat o variabilă „a” de tip float.
  2. În continuare, avem o altă variabilă „b” de tip de date întreg. Deoarece variabilele „a” și „b” sunt de diferite tipuri de date, „C” nu va permite utilizarea unei astfel de expresii și va genera o eroare. În unele versiuni de „C”, expresia va fi evaluată, dar rezultatul nu va fi dorit.
  3. Pentru a evita astfel de situații, am tipizat variabila „a” de tip float. Folosind metode de turnare a tipului explicit, am convertit cu succes float în tipul de date întreg.
  4. Am tipărit valoarea „a”, care este încă un float
  5. După tipărire, rezultatul va fi întotdeauna un întreg „b”.

În acest fel, putem implementa turnarea de tip explicit în programarea C.

Rezumat

  • Typecasting este denumită și conversie de tip
  • Înseamnă convertirea unui tip de date în altul.
  • Conversia unui tip de date mai mic într-unul mai mare se mai numește și promovarea tipului.
  • Există două tipuri de conversie de tip: conversie implicită și explicită de tip în C.
  • Conversia implicită a tipului operează automat atunci când este găsit tipul de date compatibil.
  • Conversia explicită a tipului necesită un operator de turnare a tipului.

Rețineți următoarele reguli pentru practica de programare atunci când aveți de-a face cu diferite tipuri de date pentru a preveni pierderea datelor:

  • Tipurile întregi ar trebui convertite în float.
  • Tipurile flotante ar trebui convertite în dublu.
  • Tipurile de caractere trebuie convertite în numere întregi.