TypeCasting v C: implicitné, explicitné s príkladom

Obsah:

Anonim

Čo je obsadenie v jazyku C?

Typecasting prevádza jeden dátový typ na druhý. Nazýva sa tiež ako prevod údajov alebo prevod typu. Je to jeden z dôležitých konceptov zavedených do programovania „C“.

Programovanie „C“ poskytuje dva typy operácií odlievania typov:

  1. Implicitné prenášanie typu
  2. Explicitné odlievanie typu

Implicitné prenášanie typu

Implicitné prenášanie typov znamená konverziu dátových typov bez straty pôvodného významu. Tento typ obsadenia je nevyhnutný, ak chcete zmeniť typy údajov bez toho, aby ste zmenili význam hodnôt uložených vo vnútri premennej.

Implicitná konverzia typu sa stane automaticky, keď sa hodnota skopíruje do kompatibilného dátového typu. Počas prevodu sa uplatňujú prísne pravidlá pre prevod typu. Ak sú operandy dvoch rôznych dátových typov, potom sa operand s nižším dátovým typom automaticky prevedie na vyšší dátový typ. Tento typ prevodu typov je možné vidieť v nasledujúcom príklade.

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

Výkon

1010

  1. V danom príklade sme deklarovali premennú krátkeho dátového typu s hodnotou inicializovanou ako 10.
  2. Na druhom riadku sme deklarovali premennú dátového typu int.
  3. Na treťom riadku sme premennej a priradili hodnotu premennej s. Na treťom riadku sa implicitný prevod prevádza, pretože hodnota z premennej s, ktorá je krátkeho dátového typu, sa kopíruje do premennej, ktorá je typu int.

Konverzia znaku na int

Zvážte príklad pridania znaku dekódovaného v ASCII s celým číslom:

#include main() {int number = 1;char character = 'k'; /*ASCII value is 107 */int sum;sum = number + character;printf("Value of sum : %d\n", sum );} 

Výkon:

 Value of sum : 108

Tu kompilátor vykonal celočíselnú propagáciu prevedením hodnoty „k“ na ASCII pred vykonaním skutočnej operácie pridania.

Hierarchia aritmetickej konverzie

Kompilátor najskôr pokračuje s podporou znaku na celé číslo. Ak majú operandy stále rôzne dátové typy, potom sa prevedú na najvyšší dátový typ, ktorý sa zobrazuje v nasledujúcom grafe hierarchie:

Na pochopenie tohto konceptu zvážte nasledujúci príklad:

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

Výkon:

 sum = 120.000000 

Po prvé, C premenná dostane prevedený na celé číslo, ale kompilátor prevedie num a c do "float" a pridá do vytvorenia, float 'výsledok.

Dôležité body o implicitných premenách

  • Implicitný typ konverzie typu sa nazýva aj štandardná konverzia typu. Pri implicitnom obsadení typu nevyžadujeme žiadne kľúčové slová ani špeciálne vyhlásenia.
  • Konverzia z menšieho dátového typu na väčší dátový typ sa tiež nazýva propagácia typu . Vo vyššie uvedenom príklade môžeme tiež povedať, že hodnota s je povýšená na typ integer.
  • Implicitná konverzia typu sa vždy deje s kompatibilnými dátovými typmi.

Nemôžeme vykonať implicitné prenášanie typov na dátové typy, ktoré nie sú navzájom kompatibilné, ako napríklad:

  1. Konverziou float na int sa skráti zlomková časť, čím sa stratí význam hodnoty.
  2. Pri prevedení dvojitej hodnoty na float sa číslice zaokrúhlia nahor.
  3. Konverzia long int na int spôsobí zhadzovanie prebytočných bitov vyššieho rádu.

Vo všetkých vyššie uvedených prípadoch, keď prevádzame dátové typy, hodnota stratí význam. Zvyčajne kompilátor varuje pred stratou významu hodnoty.

Programovanie „C“ poskytuje ďalší spôsob obsadenia, čo je explicitné prenášanie typu.

Explicitné odlievanie typu

Pri implicitnej konverzii typu sa dátový typ prevádza automaticky. Existuje niekoľko scenárov, v ktorých možno budeme musieť vynútiť prevod typu. Predpokladajme, že máme premennú div, ktorá uchováva rozdelenie dvoch operandov, ktoré sú deklarované ako dátový typ int.

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

V tomto prípade po rozdelení vykonanom na premenných var1 a var2 bude výsledok uložený v premennej „result“ v celočíselnom formáte. Kedykoľvek sa to stane, hodnota uložená v premennej „result“ stratí význam, pretože nezohľadňuje zlomkovú časť, ktorá sa zvyčajne získa rozdelením dvoch čísel.

Na vynútenie prevodu typu v takýchto situáciách používame explicitné odlievanie typov.

Vyžaduje operátor casting typu. Všeobecná syntax pre operácie odlievania typov je nasledovná:

(type-name) expression

Tu,

  • Názov typu je štandardný údajový typ v jazyku „C“.
  • Výrazom môže byť konštanta, premenná alebo skutočný výraz.

Poďme napísať program na demonštráciu implementácie explicitného typového odlievania v „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;}

Výkon:

Value of a is 1.200000Value of b is 2

  1. Inicializovali sme premennú typu „a“ typu float.
  2. Ďalej máme ďalšiu premennú 'b' celočíselného dátového typu. Pretože premenné „a“ a „b“ majú rôzne typy údajov, znak „C“ neumožňuje použitie tohto výrazu a spôsobí chybu. V niektorých verziách znaku „C“ bude výraz vyhodnotený, ale výsledok nebude požadovaný.
  3. Aby sme sa vyhli takýmto situáciám, vytvorili sme typickú premennú typu „a“ typu float. Použitím metód explicitného vkladania typov sme úspešne premenili float na celé číslo dátového typu.
  4. Máme vytlačenú hodnotu 'a', čo je stále plavák
  5. Po obsadení bude výsledkom vždy celé číslo „b“.

Týmto spôsobom môžeme implementovať explicitné odlievanie typov v programovaní „C“.

Zhrnutie

  • Typecasting sa nazýva aj ako konverzia typu
  • Znamená to prevod jedného dátového typu na druhý.
  • Konverzia menšieho dátového typu na väčší sa nazýva aj propagácia typu.
  • „C“ poskytuje implicitný a explicitný spôsob prevodu typu.
  • Implicitná konverzia typu funguje automaticky, keď sa nájde kompatibilný dátový typ.
  • Explicitná konverzia typu vyžaduje operátor casting typu.

Pri práci s rôznymi typmi údajov nezabudnite na nasledujúce pravidlá programovania, aby ste zabránili ich strate:

  • Typy celých čísel by sa mali konvertovať na float.
  • Float typy by mali byť prevedené na dvojnásobok.
  • Typy znakov by sa mali prevádzať na celé číslo.