Typové přetypování v jazyce C: Implicitní a explicitní konverze
⚡ Chytré shrnutí
Přetypování v jazyce C převádí jeden datový typ na jiný, a to buď implicitně, když kompilátor automaticky zvolí menší kompatibilní typ, nebo explicitně, když programátor vynutí konverzi pomocí operátoru přetypování, aby řídil přesnost a zabránil neočekávaným výsledkům.
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á převod datových typů bez ztráty jejich původního významu. Tento typ přetypování je nezbytný, pokud chcete změnit datové typy beze změny významnosti 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 kompilátor převede num a c na „float“ a sečte je, čímž vytvoří výsledek „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á povýšení 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í poklesping 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' 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 požadovaný.
- 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.




