Toto je starší verze dokumentu!
Operátory
Operátor přiřazení
Hned prvním operátorem bez kterého se určitě neobejdeme, je operátor přiřazení. Jedná se o základní, ale zřejmě najčastěji používaný operátor a značí se rovnítkem (. Podívejme se na následující ukázku:
int x; x = 7; printf("%d\n",x);
Máme proměnnou x, které je přiřazena hodnota 7. Na této ukázce je výsledná hodnota, která se vypíše celá zřejmá. Podívejme se však na následující ukázku:
int x,y,z; x = 7; //proměnné x je přiřazena hodnota 7 (x=7;y=0,z=0) y = x; //proměnné y je přiřazena hodnota proměnné x, tedy 7 (x=7;y=7;z=0) z = 3; //proměnné z je přiřazena hodnota 3 (x=7;y=7;z=3) x = y+z; //proměnné x je přiřazen součet hodnot proměnných y a z (x=10,y=7,z=3) printf("%d\n",x);
Tento příklad je už o něco složitější, nicméně stačí si uvědomit, že u přiřazení platí pravidlo right to left, neboli zprava doleva. Znamená to, že hodnota pravé strany je přiřazována levé straně. Příklad:
int x,y,w,z; x = y = w = z = 7; printf("%d",x);
Hodnota proměnné x je samozřejmě 7. Tato hodnota je zprava postupně předávána všem proměnným.
Aritmetické operátory
Tyto operátory zná každý člověk již od první třídy základní školy. Jedná se o operace jako sčítaní a odčítání či dělení a násobení. Patří sem však také operace modulo, která nemusí být každému známá.
| OPERÁTOR | VÝZNAM |
|---|---|
| + | sčítání |
| - | odčítání |
| * | násobení |
| / | dělení |
| % | modulo (zbytek po dělení) |
Operaci modulo si pro jistotu vysvětlíme na následujícím příkladu:
int x; x = 10 % 3; printf("%d\n",x);
Proměnné x je přiřazena hodnota 10 % 3, což znamená zbytek po dělení třemi. Tedy pokud podělíme číslo 10 třemi, dostaneme výsledek 3 a zbytek 1 - tento zbytek je výslednou hodnotou.
Tímto způsobem lze například snadno zjistit, zda je číslo sudé nebo liché (19 % 2 = 1; 22 % 2 = 0).
Složené přiřazení
Jednoduchý operátor přiřazení již známe, proto se můžeme podívat na přiřazení složené. Bez znalosti operátorů složeného přiřazení se však bez problémů obejdeme, jedná se pouze o zjednodušení zápisu. Například:
x += y;
má stejný význam jako:
x = x + y;
Obdobné je to i s dalšími složenými operátory: -=, *=, /=, %=, »=, «=, &=, ^=, |=
Inkrementace a dekrementace
Pokud proměnnou inkrementujeme, znamená to, že její hodnotu zvýšíme o 1. Naopak dekrementovat znamená snížit hodnotu o 1. Inkrementace se značí ++ (např.: a++;) a dekrementace – (např.: a–;).
x++;
Tento zápis má stejný význam jako zápis x = x + 1;. U dekrementace je pouze rozdíl ve znaménku. Operátory pro inkrementaci a dekrementaci lze zapsat jednak za proměnnou (postfix), ale i před proměnnou (prefix), tedy x++ nebo ++x. Tyto dva zápisy mají relativně stejný význam. Ovšem při přiřazování se liší:
int x,y; y = 2; x = ++y; printf("%d\n",x);
Pokud použijeme prefixový způsob zápisu, bude proměnné x přiřazena hodnota 3, jelikož při přiřazování nejprve došlo k inkrementaci proměnné y a až poté k přiřazení.
int x,y; y = 2; x = y++; printf("%d\n",x);
Pokud však použijeme postfixový zápis, bude proměnné x přiřazena hodnota 2, protože při přiřazování byla nejprve proměnné x přiřazena hodnota y (2) a až poté došlo k inkrementaci y.
Relační operátory
Relační operátory se používají pro vzájemné porovnání dvou ale i více proměnných. Porovnávat můžeme například zda jsou si hodnoty proměnných rovny nebo zda je jedna větší než druhá a podobně.
| OPERÁTOR | VÝZNAM |
|---|---|
| > | větší než |
| < | menší než |
| >= | větší nebo rovno |
| ⇐ | menší nebo rovno |
| == | je rovno |
| != | není rovno |
Výsledkem porovnání je vždy booleovská hodnota a to pravda nebo nepravda. Například:
int x,y; x = 4; y = 2; x <= y; //nepravda x > y; //pravda x == y+2; //pravda x/2 != y; //nepravda
Operátor = neslouží pro porovnání rovnosti proměnných. Je třeba použít operátor ==.
Logické operátory
Logické operátory mají stejnou funkci jako spojka ve větě. Spojují několik výroků v jeden (složený výrok). Výsledkem je pravda nebo nepravda. Patří sem také operátor negace, který neguje logickou hodnotu výroku. Tedy z pravdy negací vznikne nepravda a naopak. Mezi logické operátory patří:
| OPERÁTOR | VÝZNAM | ||
|---|---|---|---|
| && | spojka a (and) | ||
| spojka nebo (or) | |||
| ! | negace | ||
Příklad: Mějme následující složený výrok:
int x,y; x = 1; y = 2; ((x < y) && (y != x));
Operátor && nám jednoduché výroky (x < y) a (y != x) spojuje v jeden složený výrok. Výslednou hodnotu výroku určíme z pravdivostních hodnot jednotlivých jednoduchých výroků.
Jednoduchý výrok (x < y) dává výslednou hodnotu pravda stejně jako výrok (y != x). Výslednou hodnotou složeného výroku je tedy pravda, jelikož pravda a pravda = pravda. Podívejme se na následující pravdivostní tabulky:
A B A && B pravda pravda pravda pravda nepravda nepravda nepravda pravda nepravda nepravda nepravda nepravda Z této pravdivostní tabulky jasně vyplývá, že k tomu, aby byl složený výrok se spojkou && pravdivý, musí být pravdivé i všechny jednoduché výroky ze kterých je je tento výrok složen.
A B A || B
pravda pravda pravda
pravda nepravda pravda
nepravda pravda pravda
nepravda nepravda nepravda
Naopak z pravdivostní tabulky spojky || vyplývá, že stačí aby byl pravdivý pouze jeden jednoduchý výrok.
Pro úplnost si ukážeme ještě již zmiňovanou negaci:
int x,y; x = 1; y = 2; !(y > x);
Výslednou hodnotou je nepravda a to i přesto, že výrok 2 > 1 je pravdivý. Výsledná hodnota výroku je totiž negována.
Priorita operátorů
Priorita operátorů má vliv na to, která operace se provede dříve. Příklad:
int x; x = 2 + 3 * 4; cout « x « endl; Výsledkem je číslo 14, protože nejprve dojde k součinu čísel 3 a 4, jelikož násobení má větší prioritu než sčítání, až poté se přičte dvojka.
Prioritu operátorů však vůbec nepotřebujete znát. Existuje jednoduchý trik a to závorky. Pokud tedy chceme, aby nejdříve došlo k součtu čísel 2 a 3, pomůžeme si závorkami:
int x; x = (2 + 3) * 4; cout « x « endl; Výsledkem je nyní číslo 20.
V C++ existují ještě další operátory. My si však nyní bohatě vystačíme z operátory, které jsme si uvedli v této lekci.