operátory (2. část)
DESCRIPTION
Verze 2009.01. Operátory (2. část). 4. A1PRG - Programování – Seminář Ing. Michal [email protected]. Agenda. Další operátory v jazyce C Priorita a asociativita vyhodnocování operátorů. Opakování. - PowerPoint PPT PresentationTRANSCRIPT
A1PRG - Programování – Seminář
Ing. Michal Heczko [email protected]
Operátory (2. část) 4
Verze 2009.01
Agenda
Další operátory v jazyce C Priorita a asociativita vyhodnocování
operátorů
Opakování
Operátor - symbolické vyjádření elementární funkce s jednou nebo i více vstupními proměnnými, vrací jednu výstupní hodnotu. Aritmetické operátory – základní
matematické operace. Relační operátory – porovnání dvou hodnot Logické operátory – logické operace nad
logickými hodnotami. Bitové logické operátory - logické operace
nad jednotlivými bity.
Opakování
Dělení operátorů podle počtu vstupních hodnot: Unární operátory –pouze jedna vstupní
hodnota Binární operátory – dvě vstupní hodnoty Ternární operátory – tři vstupní hodnoty
Operátor podmínky
Jediný ternární operátor v jazyce C Obecná syntaxe:
Výraz_1 ? Výraz_2 : Výraz_3
Příklad: (x > 5) ? 1 : 0
Operátor podmínky
V určitých případech nahrazuje příkaz IF Př.
if (y > z)
{
x = y;
}
else
{
x = z;
}
x = (y > z) ? y : z
Adresní operátor
Operátor reference – získání adresy objektu
Unární operátor & Pozn. Operátor & je v jazyce C definován i
jako binární ve významu bitového součinu. Návratovou hodnotou tohoto operátoru
je adresa proměnné. Použití např. u funkce scanf:
scanf(“%d”,&x);
Unární operátor *
Operátor dereference – získání objektu dle adresy. Pozn. Operátor * je v jazyce C definován i
jako binární ve významu součinu. Umožňuje odkazovat na adresu, která je
uložená v dané proměnné. Umožňuje přistupovat k danému objektu,
na jehož adresu odkazuje.
Příklad
int *x;
int y = 5;
x = &y;
printf(“%d %d %d”,*x,x,y);
*x = 8;
printf(“%d %d %d”,*x,x,y);
x = 8;
printf(“%d %d %d”,*x,x,y);
Operátor přetypování
Slouží k přetypování z jednoho datového typu na jiný.
Zápis: Nový datový typ v závorkách před jménem
proměnné. Příklad:int a=5, b=3;double c;c = a / (double)b;
sizeof
Operátor pro získání délky objektu nebo typu.
Návratová hodnota: počet bytů.
Obecná syntaxe:unsigned int sizeof(<jmeno>);
sizeof
Příklad:int velikost;float cislo;double pole[10];
velikost = sizeof(int);
velikost = sizeof(cislo);
velikost = sizeof(pole);
Čárka
Postupné vyhodnocování dvou výrazů
Obecný zápis:výraz_1, výraz_2
Postup vyhodnocování: Nejprve se vyhodnotí výraz_1 a následně výraz_2. Jeho hodnota se stává hodnotou celého výrazu.
Čárka
int i = 2; j = 3;
int k;
k = (i++, i + j);
int i = 2; j = 3;
int k;
i++;
k = i + j;
Příklad Ekvivalentní zápis
Priorita a asociativita vyhodnocování operátorů
Priorita – určuje, který operátor bude vyhodnocen jako první
Asociativita – pokud mají dva operátory stejnou prioritu, rozhoduje o pořadí směr vyhodnocování.
Priorita a asociativita vyhodnocování operátorů
Priorita
Operátory Asociativita
1 . -> () [] Zleva
2 +1 -1 ++ -- ! ~ & * (přetypování) sizeof
Zprava
3 * / % Zleva
4 +2 -2 Zleva
5 << >> Zleva
6 < > <= >= Zleva
7 == != Zleva1) Unární operátor + nebo - 2) Binární operátor + nebo -
Priorita a asociativita vyhodnocování operátorů
Priorita
Operátory Asociativita
8 & Zleva
9 ^ Zleva
10 | Zleva
11 && Zleva
12 || Zleva
13 ?: Zprava
14 = += -= *= /= %= <<= >>= &= |= ^=
Zprava
15 , Zleva
Priorita a asociativita vyhodnocování operátorů
Příklad 1:v = x + y * z; v = (x + (y * z)); Pozn.: Násobení má nejvyšší prioritu, přiřazení
nejnižší.
Příklad 2:v = x – y - z; v = ((x – y) - z); Pozn.: Rozdíl má asociativitu zleva, přiřazení
má nižší prioritu
Priorita a asociativita vyhodnocování operátorů
Příklad 3:v += w << x << y / z;
v += ((w << x) << (y / z));
Příklad 4:v = (int)w & x % y / z;
v = (((int)w) & ((x % y) / z));
Priorita a asociativita vyhodnocování operátorů
Pokud si nejste jisti prioritou a asociativitou, použijte závorky.
Závorky
3 druhy závorek ( … ) [ … ] { … }
Závorky ( … )
Závorky ( … )
Závorky [ … ]
Závorky { … }
A1PRG 4. Operátory II.
Děkuji za pozornost
Ing. Michal Heczko
218/U3
Prezentace k dispozici na http://vyuka.fai.utb.cz