TypeCasting C-ben: implicit, explicit példával

Tartalomjegyzék:

Anonim

Mi a tipizálás C-ben?

A típusváltás egy adattípust konvertál egy másikra. Adatkonverziónak vagy típuskonverziónak is nevezik. Ez az egyik fontos fogalom, amelyet a „C” programozás vezet be.

A „C” programozás kétféle típusú öntési műveletet kínál:

  1. Implicit típusú casting
  2. Explicit típusú casting

Implicit típusú casting

Az implicit típustovábbítás az adattípusok átalakítását jelenti eredeti értelmének elvesztése nélkül. Ez a típusú tipizálás elengedhetetlen, ha az adattípusokat úgy kívánja megváltoztatni, hogy a változóban tárolt értékek jelentősége nem változik.

Az implicit típuskonvertálás automatikusan megtörténik, amikor az értéket átmásolják a kompatibilis adattípusba. Az átalakítás során szigorú szabályokat alkalmaznak a típusátalakításra. Ha az operandusok két különböző adattípusból állnak, akkor az alacsonyabb adattípusú operandus automatikusan magasabb adattípussá alakul. Ez a típusú átalakítás a következő példában látható.

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

Kimenet

1010

  1. Az adott példában rövid adattípusú változót deklaráltunk, amelynek értéke inicializálva 10 volt.
  2. A második sorban deklaráltunk egy int adattípusú változót.
  3. A harmadik sorban az s változó értékét rendeltük az a változóhoz. A harmadik vonalon implicit típusú konverziót hajtunk végre, amikor az s változóból származó, rövid adattípusú érték átmásolódik az a változóba, amely int adattípusú.

Karakter konvertálása Int

Tekintsük az ASCII-ben dekódolt karakter egész számmal való hozzáadásának példáját:

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

Kimenet:

 Value of sum : 108

Itt a fordító egész szám promóciót hajtott végre azzal, hogy a tényleges összeadási művelet végrehajtása előtt a „k” értékét ASCII-vé konvertálta.

Számtani konverziós hierarchia

A fordító először egy karaktert egész számgá emeli. Ha az operandusoknak még mindig különböző adattípusaik vannak, akkor azokat a legmagasabb adattípussá konvertálják, amely a következő hierarchiadiagramon jelenik meg:

Vegye figyelembe a következő példát a koncepció megértéséhez:

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

Kimenet:

 sum = 120.000000 

Először is, a c változó egész számra konvertálódik, de a fordító a számokat és a c értékeket "lebegővé" alakítja, és összeadja őket egy "lebegő" eredmény létrehozásához.

Fontos pontok az implicit konverziókkal kapcsolatban

  • A típusátalakítás implicit típusát szokásos típusú konverziónak is nevezzük. Az implicit típusú castingban nem igényelünk kulcsszavakat vagy speciális utasításokat.
  • A kisebb adattípusból a nagyobb adattípussá történő konvertálást típus-promóciónak is nevezik . A fenti példában azt is mondhatjuk, hogy s értékét egész számra emeljük.
  • Az implicit típusú konverzió mindig a kompatibilis adattípusokkal történik.

Nem végezhetünk implicit típusú öntést az egymással nem kompatibilis adattípusokon, például:

  1. Az úszó int-vé konvertálása meg fogja csonkolni a törtrészt, így elveszíti az érték jelentését.
  2. A dupla lebegővé konvertálása felfelé kerekíti a számjegyeket.
  3. A hosszú int-nek konvertálása feleslegesen magas rendű bitek esését okozza.

A fenti esetek mindegyikében, amikor átalakítjuk az adattípusokat, az érték elveszíti értelmét. Általában az érték jelentésvesztését figyelmezteti a fordító.

A „C” programozás a típuskészítés egy másik módját biztosítja, amely az explicit típusú casting.

Explicit típusú casting

Az implicit típusú konverzióban az adattípus automatikusan konvertálódik. Vannak olyan esetek, amikor előfordulhat, hogy kényszerítenünk kell a típusátalakítást. Tegyük fel, hogy van egy div változónk, amely két operandus osztását tárolja, amelyeket int adattípusként deklarálunk.

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

Ebben az esetben a var1 és var2 változókkal végzett osztás után az "eredmény" változóban tárolt eredmény egész formátumú lesz. Valahányszor ez megtörténik, az "eredmény" változóban tárolt érték elveszíti értelmét, mert nem veszi figyelembe azt a törtrészt, amelyet általában két szám felosztásakor kapunk.

A típuskonvertálás kényszerítésére ilyen helyzetekben explicit típusú castingot használunk.

Típusöntő operátort igényel. A típusú öntési műveletek általános szintaxisa a következő:

(type-name) expression

Itt,

  • A típusnév a szokásos „C” nyelvű adattípus.
  • Egy kifejezés lehet konstans, változó vagy tényleges kifejezés.

Írjunk egy programot az explicit típus-casting megvalósításának bemutatására a C-ben.

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

Kimenet:

Value of a is 1.200000Value of b is 2

  1. Inicializáltuk az a típusú változó float változót.
  2. Ezután még egy „b” változót kapunk egész típusú adattípusból. Mivel az „a” és „b” változó különböző adattípusú, a „C” nem engedélyezi az ilyen kifejezés használatát, és hibát fog felvetni. A „C” egyes verzióiban a kifejezés kiértékelésre kerül, de az eredmény nem lesz kívánatos.
  3. Az ilyen helyzetek elkerülése érdekében a float típusú „a” változót megadjuk. Az explicit típusú casting módszerek használatával sikeresen átalakítottuk a float adattípusú egész számokká.
  4. Van egy nyomtatott "a" értéke, amely még mindig úszó
  5. A tipizálás után az eredmény mindig „b” egész szám lesz.

Ily módon megvalósíthatjuk az explicit típusú castingot a „C” programozásban.

Összegzés

  • A típusírást másolásnak is nevezzük
  • Ez azt jelenti, hogy az egyik adattípust átalakítják másikká.
  • A kisebb adattípus nagyobbá konvertálását típus-promóciónak is nevezik.
  • A „C” implicit és explicit módon biztosítja a típusátalakítást.
  • Az implicit típuskonvertálás automatikusan működik, ha megtalálható a kompatibilis adattípus.
  • Az explicit típusú konverzióhoz típus-casting operátor szükséges.

Ne felejtse el a következő szabályokat a programozási gyakorlatra, amikor különböző adattípusokkal foglalkozik az adatvesztés megelőzése érdekében:

  • Az egész számokat úszóvá kell alakítani.
  • Az úszó típusokat kettőssé kell átalakítani.
  • A karaktertípusokat egész számokká kell konvertálni.