Typ Casting v C: Typová konverze, Implicitní, Explicitní s příkladem
Co je typování v C?
Typecasting je převod jednoho datového typu na jiný. V jazyce C se tomu také říká konverze dat nebo konverze typu. Je to jeden z důležitých konceptů zavedených v programování v jazyce C.
Programování „C“ poskytuje dva typy operací odlévání typu:
- Implicitní typové obsazení
- Explicitní typové obsazení
Implicitní typové obsazení
Implicitní přetypování znamená konverzi datových typů bez ztráty původního významu. Tento typ typového obsazení je nezbytný, když chcete změnit datové typy bez změna významu hodnot uložených uvnitř proměnlivý.
Konverze implicitního typu v C probíhá automaticky, když je hodnota zkopírována do jejího kompatibilního datového typu. Při převodu se uplatňují přísná pravidla pro převod typů. 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.
#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); }
Výstup:
10 10
- V uvedeném příkladu jsme deklarovali proměnnou krátkého datového typu s hodnotou inicializovanou jako 10.
- Na druhém řádku jsme deklarovali proměnnou datového typu int.
- Na třetím řádku jsme do proměnné a přiřadili hodnotu proměnné s. Na třetím řádku se provede implicitní převod typu, kdy se hodnota z proměnné s, která je datového typu short, zkopíruje do proměnné a, která je datového typu int.
Převod znaku na Int
Zvažte příklad přidání znaku dekódovaného v ASCII s celým číslem:
#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 ); }
Výstup:
Value of sum : 108
Zde kompilátor provedl celočíselnou propagaci převedením hodnoty 'k' na ASCII před provedením skutečné operace sčítání.
Hierarchie aritmetických konverzí
Kompilátor nejprve pokračuje s povýšením znaku na celé číslo. Pokud mají operandy stále různé datové typy, převedou se 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 <stdio.h> 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
Nejprve se proměnná c převede na celé číslo, ale převede ji kompilátor num si c do „float“ a přidá je k vytvoření výsledku „float“.
Důležité body o implicitních konverzích
- Implicitní typ konverze typu se také nazývá standardní konverze typu. Při přetypování implicitního typu nevyžadujeme žádná klíčová slova ani speciální příkazy.
- Převod z menšího datového typu na větší datový typ se také nazývá jako propagace typu. Ve výše uvedeném příkladu můžeme také říci, že hodnota s je povýšena na typ integer.
- Implicitní převod typu se vždy provádí s kompatibilními datovými typy.
Nemůžeme provádět implicitní přetypování na datové typy, které nejsou vzájemně kompatibilní, jako například:
- Převodem float na int dojde ke zkrácení zlomkové části, čímž se ztratí význam hodnoty.
- Převodem double na float se číslice zaokrouhlí nahoru.
- Převod long int na int způsobí vypuštění nadbytečných bitů vyššího řádu.
Ve všech výše uvedených případech, když převedeme datové typy, hodnota ztratí smysl. Ztráta významu hodnoty je obecně varována kompilátorem.
Programování "C". poskytuje další způsob přetypování, kterým je explicitní přetypování.
Explicitní typové obsazení
Při implicitní konverzi typu se datový typ převádí automaticky. Existují některé scénáře, ve kterých možná budeme muset vynutit konverzi 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 dě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é „výsledek“ ztrácí svůj význam, protože nebere v úvahu zlomkovou část, která se běžně získá dělením dvou čísel.
Abychom v takových situacích vynutili konverzi typu, používáme explicitní přetypování.
Vyžaduje to operátora typového lití. Obecná syntaxe operací přetypování je následující:
(type-name) expression
Zde,
- Název typu je standardní datový typ jazyka 'C'.
- Výraz může být konstanta, proměnná nebo skutečný výraz.
Pojďme napsat program, který demonstruje, jak přetypovat v C s explicitním přetypováním.
#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; }
Výstup:
Value of a is 1.200000 Value of b is 2
- Inicializovali jsme proměnnou 'a' typu float.
- Dále máme další proměnnou 'b' celočíselného datového typu. Protože proměnné 'a' a 'b' jsou různých datových typů, 'C' nedovolí použití takového výrazu a způsobí chybu. V některých verzích 'C' bude výraz vyhodnocen, ale výsledek nebude žádoucí.
- Abychom takovým situacím předešli, přetypovali jsme proměnnou 'a' typu float. Použitím explicitních metod přetypování jsme úspěšně převedli float na datový typ celé číslo.
- Vytiskli jsme hodnotu 'a', která je stále plovoucí
- Po přetypování bude výsledkem vždy celé číslo 'b.'
Tímto způsobem můžeme implementovat explicitní přetypování v programování C.
Shrnutí
- Typové osazení se také nazývá konverze 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.
- Existují dva typy konverze typu: implicitní a explicitní konverze typu v C.
- Konverze implicitního typu funguje automaticky, když je nalezen kompatibilní datový typ.
- Explicitní převod typu vyžaduje operátor přetypování typu.
Při práci s různými datovými typy mějte na paměti následující pravidla pro programování, abyste zabránili ztrátě dat:
- Typy celých čísel by měly být převedeny na float.
- Typy float by měly být převedeny na double.
- Typy znaků by měly být převedeny na celé číslo.