~~NOCACHE~~
~~REVEAL theme=dokuwiki&transition=convex&controls=1&show_progress_bar=1&build_all_lists=1&show_image_borders=0&horizontal_slide_level=2&enlarge_vertical_slide_headers=0&show_slide_details=1&open_in_new_window=1&size=1280x960~~
====== Operátory ======
Operátory určují co se má s proměnnými a konstantami provést. ((Operátory. Klikzone.cz: Tvorba webu pro každého [online] [cit. 2020-12-07]. Dostupné z: https://www.klikzone.cz/cplusplus/operatory.php))
===== Operátor přiřazení =====
Jedná se o základní, ale zřejmě nejčastěji používaný operátor a značí se rovnítkem ''=''.
---->
int x;
x = 7;
printf("%d\n",x);
// output: "7"
Proměnné x, je přiřazena hodnota 7. Při výpisu se tedy zobrazí "7".
<----
---->
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);
* 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ě.
<----
---->
==== Pravidla přiřazení ====
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 =====
* Jedná se o operace jako sčítaní a odčítání či dělení a násobení.
* Patří sem však také operace modulo.
^ OPERÁTOR ^ VÝZNAM ^
| + | sčítání |
| - | odčítání |
| * | násobení |
| / | dělení |
| % | modulo (zbytek po dělení) |
---->
int x;
x = 10 % 3;
printf("%d\n",x);
// output: "1"
* Proměnné ''x'' je přiřazen výsledek operace ''10 % 3'' - zbytek po dělení třemi.
* 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í ====
* Jedná se pouze o zjednodušení zápisu.
* ''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 ====
* Inkrementace se značí ''++'' (např.: ''a++;'') a dekrementace ''--'' (např.: ''a--;'') a používá se ke zvýšení nebo zvýšení hodnoty proměnné o 1.
x++;
Tento zápis má stejný význam jako zápis ''x = x + 1;''.
===== 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.
---->
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.
^ 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.
<----
==== Pravdivostní tabulky: ====
^ A ^ B ^ A && B ^ A %%||%% B ^
| 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 |
| 0 | 0 | 0 | 0 |
* 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.
* Z pravdivostní tabulky spojky ''||'' vyplývá, že stačí aby byl pravdivý pouze jeden jednoduchý výrok.
=== Negace ===
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ů =====
int x;
x = 2 + 3 * 4;
printf("%d\n",x);
* 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.
* 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.