Skočiť na obsah


Programovanie v jazyku C a C#

Návody pre začiatočníkov a pokročilých



Fórum: Škôlka jazyka C
- - - - -
Fotografia

2. lekcia C (Typová konverzia) základná škola


Typová konverzia.
Rozumie sa tým prevod premennej určitého typu na iný typ, napr. int na float.
Céčko pozná 2 druhy typovej konverzie:
* implicitná - samovolná alebo automatická
* explicitná - vynútená
Implicitná
Má tieto základné pravidlá:
1) Pred vykonaním operácie sa samostatné operandy konvertujú nasledovne:
* typ char alebo short inf sa automaticky konvertuje na typ int
* typ unsigned char a unsigned short sa konvertujú na int len vtedy, ak int môže
reprezentovať ich hodnotu (nepretečie). V opačnom prípade sa konvertujú na unsigned int.
2) Ak majú dva operandy jednej operácie rôzny typ, vtedy je typ operandu s nižšou prioritou
konvertovaný na typ s prioritou vyššou, podla nasledujúcej hierarchie (kde má int najnižšiu
prioritu):

int				=> unsigned int

unsigned int	 => long

long			 => unsigned long

unsigned long	 => float

float			 => double

double			 => long double

Napr. ak je prvý operand typu float a druhý má nižší typ, zkonvertuje sa druhý operand na typ float.
3) V priraďovacích výrazoch je typ na pravej strane konvertovaný na typ z ľavej strany
a teda je to typ výsledku.
Príklady:

1) Ak je definícia: char c; potom:

c = 1;		 1 je konvertované na char, to znamená, že c obsahuje znak "Ctrl A"

c++;			c obsahuje znak "Ctrl B"

c = c + '1';	je ako c := ORD(c) + ORD('1')

2) Ak je definícia: int i; potom:

i = 'A';		je ako i := ORD('A'); (ordinárne číslo 'A' je 65)

i = 'A' + 2;	je ako i := ORD('A') + 2;

i = 3.8;		i bude 3 (0.8 sa odreže)

3) Ak je definícia: double g; potom:

g = 5;		 g bude 5.0

4) i = g * c;

Najskôr sa skonvertuje c na int (pravidlo 1), potom sa c skonvertuje na double (pravidlo 2).

Výsledok výrazu g * c je double, ale podľa pravidla 3 sa skonvertuje na int a priradí do i.

Explicitná
Narozdiel od implicitnej konverzie, ktorú nie sme schopný ovplyvniť, môžme explicitnú využívať
kedy chceme, ale s tým rizikom, že nevhodné použitie spôsobí problémy.
Explicitná konverzia sa tiež nazáva pretypovanie (casting alebo typecasting) a má formu:
(typ) výraz
To znamená, že výraz (alebo premenná) je v čase prekladu konvertovaný na požadovaný typ.
Príklady a význam často používaných konverzií:

(int) char_vyraz		- prevod znaku na ordinárne číslo (ACSII kód dekadický)

(char) int_vyraz		- prevod ordinárneho čísla na zodpovedajúci znak

(int) float_vyraz	 - odrezanie desatinnej časti

(double) int_vyraz	 - prevod celého čísla na reálne

(double) float_vyraz	- zväčšenie presnosti

Explicitné pretypovanie je nutné v mnohých prípadoch, najčastejšie pri používaní pointerov.
Vo verzii K&R jazyka C sa väčšinou používa klasický prípad, kedy je pretypovanie nutné:

int i = 10;

double f;

f = sqrt((double) i);

Bez pretypovania boli výsledky chybné, petože funkcia pre výpočet odmocniny (sqrt())
potrebuje ako parameter typ double a v K&R verzii jazyka C nie je automatická (implicitná)
konverzia typu int na double.
Tento prblém síce v AVSI C odpadá, ale v podobných prípadoch je vhodné explicitné pretypovanie
pretože sprehľadňuje programátorove úmysli a je jasné, že je to chcená zmena.
Niekedy je pretypovanie nutné, aby sme sa zbavili varovných hlásení o nevhodnom type premennej.
Pozor:
(int) f = 3; je chybý zápis.

Úlohy:

1) Napíšte program, ktorý načíta znaky z klávesnice do pola[]. Vypíše ich na obrazovku. Potom
znaky pretypujte na ordinárne, vypíšte ich a nakoniec ordinárne čísla pretypujte na znaky
a vypíšte.
Spoiler

2) Napíšte program, ktorý načíta celé číslo z klávesnice, vypočíta jeho druhú odmocninu
a vypíše ju. Program pobeží v nekonečnom cykle a ukončíte ho stlačením klávesy 0 <nular>.
Spoiler
  • 0

Popis: Typová konverzia

- implicitná
- explicitná
- úlohy k lekcii
Poznámky: Ak chceš, aby ti niekto úlohy skontroloval, zabal ich do zip-u a zašli na e-mail:
libcosenior zavináč gmail botka com

Poprípade tam môžeš konzultovať, čo ti nie je jasné.
Odkazy:


0 Komentárov


Najlepšie lekcie


Najnovšie pridané lekcie


Najnovšie komentáre


Najviac komentované lekcie


Najviac zobrazené lekcie


Náhodné lekcie


Na tejto stránke bolo užívateľ(ov) za posledných 30 minút

členov, návštevníkov