TypeCasting v C: implicitní, explicitní s příkladem

Obsah:

Anonim

Co je Typecasting v C?

Typecasting převádí jeden datový typ na jiný. Nazývá se také jako převod dat nebo převod typu. Je to jeden z důležitých konceptů zavedených v programování „C“.

Programování 'C' poskytuje dva typy operací odlévání typu:

  1. Implicitní odlévání typu
  2. Explicitní odlévání typu

Implicitní odlévání typu

Implicitní přetypování typu znamená převod datových typů bez ztráty původního významu. Tento typ vysílání je zásadní, pokud chcete změnit datové typy beze změny významu hodnot uložených uvnitř proměnné.

Implicitní převod typu se stane automaticky, když je hodnota zkopírována do kompatibilního datového typu. Během převodu platí přísná pravidla pro převod typu. Pokud jsou operandy dvou různých datových typů, pak se operand s nižším datovým typem automaticky převede na vyšší datový typ. Tento typ převodu typu lze vidět v následujícím příkladu.

#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ýstup

1010

  1. V uvedeném příkladu jsme deklarovali proměnnou krátkého datového typu s hodnotou inicializovanou jako 10.
  2. Na druhém řádku jsme deklarovali proměnnou datového typu int.
  3. Na třetím řádku jsme přiřadili hodnotu proměnné s proměnné a. Na třetím řádku se provádí implicitní převod typu, protože hodnota z proměnné s, která je krátkého datového typu, se zkopíruje do proměnné, která je datového typu int.

Převod znaků na int

Zvažte příklad přidání znaku dekódovaného v ASCII s celým číslem:

#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ýstup:

 Value of sum : 108

Zde kompilátor provedl celočíselnou propagaci převedením hodnoty 'k' na ASCII před provedením operace skutečného přidání.

Hierarchie aritmetické konverze

Kompilátor nejprve pokračuje s podporou znaku na celé číslo. Pokud mají operandy stále různé datové typy, jsou převedeny na nejvyšší datový typ, který se zobrazí v následujícím hierarchickém grafu:

Pro pochopení konceptu zvažte následující příklad:

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

Výstup:

 sum = 120.000000 

Za prvé, C proměnná dostane převeden na celé číslo, ale kompilátor převede num a c do „float“ a přidá do vytvoření ‚float‘ výsledek.

Důležité body týkající se implicitních konverzí

  • Implicitní typ převodu typu se také nazývá jako převod standardního typu. V castingu implicitního typu nevyžadujeme žádné klíčové slovo ani speciální příkazy.
  • Převod z menšího datového typu na větší datový typ se také nazývá propagace typu . Ve výše uvedeném příkladu můžeme také říci, že hodnota s je povýšena na typ celé číslo.
  • Implicitní převod typu se vždy děje s kompatibilními datovými typy.

U datových typů, které nejsou navzájem kompatibilní, nemůžeme provádět implicitní odlévání typů, jako například:

  1. Převedením float na int dojde ke zkrácení zlomkové části a tím ke ztrátě významu hodnoty.
  2. Převod dvojitého na float zaokrouhlí číslice nahoru.
  3. Konverze long int na int způsobí propad nadbytečných bitů vyššího řádu.

Ve všech výše uvedených případech, když převádíme datové typy, hodnota ztratí svůj význam. Zpravidla kompilátor varuje před ztrátou významu hodnoty.

Programování „C“ poskytuje další způsob typování, což je explicitní odlévání typu.

Explicitní odlévání typu

V implicitním převodu typu se datový typ převede automaticky. Existují některé scénáře, ve kterých možná budeme muset vynutit převod typu. Předpokládejme, že máme proměnnou div, která ukládá rozdělení dvou operandů, které jsou deklarovány jako datový typ int.

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

V tomto případě po rozdělení provedeném na proměnných var1 a var2 bude výsledek uložený v proměnné „result“ v celočíselném formátu. Kdykoli k tomu dojde, hodnota uložená v proměnné „result“ ztratí svůj význam, protože nebere v úvahu zlomkovou část, která se normálně získá při dělení dvou čísel.

K vynucení převodu typu v takových situacích používáme explicitní přetypování typu.

Vyžaduje operátor casting typu. Obecná syntaxe pro operace odlévání typů je následující:

(type-name) expression

Tady,

  • Název typu je standardní datový typ jazyka „C“.
  • Výrazem může být konstanta, proměnná nebo skutečný výraz.

Pojďme napsat program, který předvede implementaci explicitního typového castingu 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ýstup:

Value of a is 1.200000Value of b is 2

  1. Inicializovali jsme proměnnou typu „a“ typu float.
  2. Dále máme další proměnnou 'b' celočíselného datového typu. Protože proměnná „a“ a „b“ mají různé datové typy, „C“ neumožní použití takového výrazu a vyvolá chybu. V některých verzích „C“ bude výraz vyhodnocen, ale výsledek nebude žádoucí.
  3. Abychom se těmto situacím vyhnuli, vytvořili jsme typickou proměnnou typu „a“ typu float. Pomocí explicitních metod odlévání typů jsme úspěšně převedli float na celé číslo datového typu.
  4. Máme vytištěnou hodnotu 'a', což je stále float
  5. Po typickém obsazení bude výsledkem vždy celé číslo „b“.

Tímto způsobem můžeme implementovat explicitní odlévání typů v programování 'C.'

souhrn

  • Typecasting se také nazývá jako převod typu
  • Znamená to převod jednoho datového typu na jiný.
  • Převod menšího datového typu na větší se také nazývá propagace typu.
  • 'C' poskytuje implicitní a explicitní způsob převodu typu.
  • Implicitní převod typu funguje automaticky, když je nalezen kompatibilní datový typ.
  • Explicitní převod typu vyžaduje operátor přetypování typu.

Mějte na paměti následující pravidla pro programovací praxi při práci s různými datovými typy, aby nedošlo ke ztrátě dat:

  • Typy celých čísel by měly být převedeny na plovoucí.
  • Plovoucí typy by měly být převedeny na dvojnásobek.
  • Typy znaků by měly být převedeny na celé číslo.