TypeCasting în C: Implicit, Explicit cu Exemplu

Cuprins:

Anonim

Ce este Typecasting în C?

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

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

  1. Distribuție de tip implicit
  2. Distribuție de tip explicit

Distribuție de tip implicit

Distribuirea de tip implicit înseamnă conversia tipurilor de date fără a-și pierde semnificația inițială. Acest tip de tipecastare este esențial atunci când doriți să modificați tipurile de date fără a schimba semnificația valorilor stocate în interiorul variabilei.

Conversia implicită a tipului are loc automat atunci când o valoare este copiată la tipul său de date compatibil. În timpul conversiei, se aplică reguli stricte pentru conversia de tip. Dacă operanzii sunt de două tipuri de date diferite, atunci un operand cu 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.

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

Ieșire

1010

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

Conversia caracterului în Int

Luați în considerare exemplul adăugării unui caracter decodificat în ASCII cu un număr întreg:

#include 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 întreagă prin conversia valorii „k” la ASCII înainte de a efectua operația de adăugare efectivă.

Ierarhia de conversie aritmetică

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

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

#include 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 convertește num și c în „float” și le adaugă pentru a produce un rezultat „float”.

Puncte importante despre conversiile implicite

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

Nu putem efectua o distribuție implicită a tipurilor de date care nu sunt compatibile între ele, cum ar fi:

  1. Conversia float într-un int va trunchia partea fracției, pierzând astfel semnificația valorii.
  2. Conversia dublului în plutitor va rotunji cifrele.
  3. Conversia int lung în int va provoca scăderea excesului de biți de ordin înalt.

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

Programarea „C” oferă un alt mod de tipografiere, care este castingul de tip explicit.

Distribuție de tip explicit

În conversia implicită a tipului, tipul de date este convertit automat. Există câteva scenarii în care este posibil să trebuiască să forțăm conversia tipului. Să presupunem că avem o div variabilă 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ă divizarea 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 fracțională care se obține în mod normal în împărțirea a două numere.

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

Este nevoie de un operator de turnare de tip. Sintaxa generală pentru operațiile de turnare de tip este după cum urmează:

(type-name) expression

Aici,

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

Să scriem un program pentru a demonstra implementarea tipăririi explicite în „C”.

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

Ieșire:

Value of a is 1.200000Value of b is 2

  1. Am inițializat o variabilă „a” de tip float.
  2. În continuare, avem o altă variabilă „b” de tip î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 ale „C”, expresia va fi evaluată, dar rezultatul nu va fi dorit.
  3. Pentru a evita astfel de situații, am tipografiat variabila „a” de tip float. Folosind metode explicite de turnare de tip, am convertit cu succes float în tip de date întreg.
  4. Am imprimat valoarea „a”, care este încă un float
  5. După tipografiere, rezultatul va fi întotdeauna un număr întreg „b”.

În acest fel, putem implementa castingul de tip explicit în programarea „C”.

rezumat

  • Tipografierea este, de asemenea, numită conversie de tip
  • Înseamnă conversia unui tip de date în altul.
  • Conversia unui tip de date mai mic într-unul mai mare este denumită și promovare de tip.
  • „C” oferă un mod implicit și explicit de conversie a tipului.
  • Conversia implicită a tipului funcționează automat atunci când este găsit tipul de date compatibil.
  • Conversia de tip explicită necesită un operator de turnare de tip.

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

  • Tipurile de numere întregi ar trebui convertite în float.
  • Tipurile plutitoare ar trebui convertite în dublu.
  • Tipurile de caractere ar trebui convertite în număr întreg.