Operátory - Michal Heczko
Download
Report
Transcript Operátory - Michal Heczko
Verze 2009.01
4 Operátory (2. část)
A1PRG - Programování – Seminář
Ing. Michal Heczko [email protected]
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
Příklad
Ekvivalentní zápis
int i = 2; j = 3;
int k;
k = (i++, i + j);
int i = 2; j = 3;
int k;
i++;
k = i + j;
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
1
2
3
4
5
6
7
1)
Operátory
. -> () []
+1 -1 ++ -- ! ~ & *
(přetypování) sizeof
* / %
+2 -2
<< >>
< > <= >=
== !=
Unární operátor + nebo -
2)
Asociativita
Zleva
Zprava
Zleva
Zleva
Zleva
Zleva
Zleva
Binární operátor + nebo -
Priorita a asociativita vyhodnocování
operátorů
Priorita
8
9
10
11
12
13
14
15
Operátory
&
^
|
&&
||
?:
= += -= *= /= %=
<<= >>= &= |= ^=
,
Asociativita
Zleva
Zleva
Zleva
Zleva
Zleva
Zprava
Zprava
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( … )
3 významy:
za
názvem funkce pro umístění argumentů funkce
int main( )
{
…
}
Změna
priority nebo asociativity – upřednostnění jedné
části výrazu před jinou
x = (a + b) * c;
Závorky( … )
za
názvem příkazu pro umístění parametrů
if ( x > 5 )
{
…
}
Závorky[ … ]
2 významy:
Definice
velikosti pole
int pole[10];
Umístění indexu prvku pole
pole[5] = 11;
Závorky{ … }
Označení bloku kódu
Tělo
funkce
int main()
{
…
}
Podmínky,
cykly
if (x > 5)
{
}
A1PRG
4. Operátory II.
Děkuji za pozornost
Ing. Michal Heczko
[email protected]
218/U3
Prezentace k dispozici na http://vyuka.fai.utb.cz