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