~~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.