<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE html PUBLIC '-//W3C/DTD XHTML+Voice 1.2 /EN' 'http://www.voicexml.org/specs/multimodal/x+v/12/dtd/xhtml+voice12.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xmlns:ev='http://www.w3.org/2001/xml-events'>
<head>
<link rel='canonical' href='http://pabi3.com/blog/programovanie-v-c-4-diel/' />
<link rel='stylesheet' href='http://pabi3.com/modules/items/voice.css' type='text/css' media='all' />
<form xmlns='http://www.w3.org/2001/vxml' id='title'>
<block>
The article Programovanie v C++ - 4. diel is written by Ribi
</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='body'>
<block>
Serial o programovani v programovacom jazyku C++. V stvrtom diele pozrieme na zubok operatorom.</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='full'>
<block>
Operatory
Operatory su uplne neoddelitelnou sucastou kazdeho modernejsieho programovacieho jazyka (1950 a novsi ;-). Pomocou nich mozeme vykonavat matematicke operacie typu scitanie, odcitanie, nasobenie a delenie a v pripade C++ dokonca aj vyhodnocovanie podmienok! Operatory mozno rozdelit na dve skupiny podla toho, kolko maju operandov. Ak ma operator dva operandy je binarny, ak ma operand jeden, je unarny. Binarne operatory Mozno ich dalej rozdelit na aritmeticke, relacne, logicke a bitove. Aritmeticke operatory

 +, -, *, /
 Zakladne matematike operatory, ktore pozna kazdy. Maju taku istu funkciu ako v skutocnom svete. To, ci bude vysledok kladne, alebo zaporne cislo zavisi od typu operandov. Ak su oba celocislene, aj vysledok je celocisleny. Ak je jeden z operandov realneho charakteru, aj vysledok na tom bude rovnako. Ak delime dve cele cisla, vysledok sa bude zaokruhlovat.

%
 Operator modulo sluzi na ziskavanie celocisleneho zvysku po celocislenom deleni. Ak teda vykoname operaciu 4%3, vysledkom bude cislo 1. 
 =
 Operator priradenia. Sluzi na priradenie hodnoty do premennych a datovych struktur. Relacne operatory

 &gt;, &lt;, >=, &lt;=
 Zakladne matematike operatory, ktore pozna kazdy. Maju taku istu funkciu ako v skutocnom svete. To, ci bude vysledok kladne, alebo zaporne cislo zavisi od typu operandov. Ak su oba celocislene, aj vysledok je celocisleny. Ak je jeden z operandov realneho charakteru, aj vysledok na tom bude rovnako. Ak delime dve cele cisla, vysledok sa bude zaokruhlovat.
 !=
 Vyznam operatoru je "nerovna sa". Pouziva sa pri porovnavani a vyhodnocovani vyrazov v podmienovacich prikazoch. K tomu sa vsak dostaneme az v niektorej z buducich casti. 
 ==

Rovna sa. Pouzitie je rovnake ako u predchadzajuceho operatoru.
 Ako som uz v prvom diele serialu napisal, C++ je programovaci jazyk na nizsej urovni (pozor, nemysli sa tym horsej!!!). Vdaka tomu programator disponuje moznostou pracovat s jednotlivymi bitmi. Programatorovi to dava vacsiu slobodu a moc pri pisani programov. Pri pisani nizkourovnovych aplikacii (napr.operacny system, ovladace) su podobne operatory nutnostou a preto sa taketo programy pisu spravidla v C++, alebo v assemblere (jazyk symboickeho zapisu instrukcii). Logicke operatory

 &amp;&amp;
 Logicky sucet (AND). Vyraz A&amp;&amp;B ma rovnaky vyznam, ako keby ste povedali A a B.
 ||
 Logicky sucin (OR). Jeho vyznam je rovnaky, ako vyznam slova alebo. Ked teda napisete vyraz A || B, znamena to A alebo B.
 !

Operator negacie neguje akukolvek premennu. Napr. negaciou cisla 1 (00000001b) dostaneme cislo 254 (11111110b).
 Dalsimi binarnymi operatormi su operatory bitove. Hlavnym rozdielom oproti ostatnym typom operatorov je, ze su aplikovatelne iba na cele cisla a to, ze pracuju na urovni jednotlivych bitov. Bitove operatory

 &lt;&lt;, &gt;&gt;
 Bitovy posun dolava a doprava.
 |, &amp;, ^, ~
 Bitovy sucet, sucin, exklusivny sucet a bitova negacia. Operator bitoveho posunu posunie bity smerom, do ktoreho operator ukazuje o tolko bitov, kolko urcuje druhy operand. Pri posuvani bitov moze dojst k situacii, ked bity posuniete doprava, alebo dolava prilis a tie potom "vypadnu". 00000100b &gt;&gt; 2 = 00000001b = 1d
 00000100b &lt;&lt; 2 = 00010000b = 16d V tomto pripade boli bity posunute az prilis a doslo k vypadnutiu jedneho bitu vpravo (1), resp. vlavo (2).
(1) 00111100b &gt;&gt; 3 = 00000111b = 7d
 (2) 00111100b &lt;&lt; 3 = 11100000b = 224d Ked chcete scitat cisla 6 a 3, jednoducho si v hlave poviete 6 plus 3 je 9. Na podobnom principe funguju aj operacie vykonavane aritmetickymi operatormi. Bitove operatory ale pracuju na urovni jednotlivych bitov (nuly a jednotky) a nad jednotlivymi bitmi sa pocitaju bitove operacie. Preto vysledkom operacie 6|3 nebude cislo 9, ale cislo 7! &nbsp;6d = 00000110b
 &nbsp;3d = 00000011b
 &nbsp;-------------------- bitovy sucet
 &nbsp;7d = 00000111b Pri bitovom sucte sa na nulu nastavia len tie bity, ktore su vysledkom logickeho sucinu dvoch nulovych bitov. V opacnom pripade sa bit nastavi na jednotkovy. &nbsp;6d = 00000110b
 &nbsp;3d = 00000011b
 &nbsp;-------------------- bitovy sucin
 &nbsp;2d = 00000010b
Pri bitovom sucine sa na jednotku nastavia len tie bity, ktore su vysledkom logickeho sucinu dvoch jednotkovych bitov. V opacnom pripade sa bit nastavi na nulovy. &nbsp;6d = 00000110b
 &nbsp;3d = 00000011b
 &nbsp;-------------------- bitovy exklusivny sucet
 &nbsp;5d = 00000101b Pri bitovom exklusivnom sucte sa na jednotku nastavia jedine tie bity, ktore su vysledkom bitovej operacie bitov s rozdielnymi hodnotami, cize operaciou s jednym nulovym a jednym nenulovym bitom. &nbsp;6d = 00000110b
 &nbsp;-------------------- bitova negacia
 &nbsp;249d = 11111001b Pri bitovej negacii sa hodnoty jednotlivych bitov prehodia. To znamena, ze nenulovy bit sa stane nulovym a opacne. Unarne operatory
Su to operatory, ktore maju len jeden operand. Tieto operatory mavaju prefixovu a postfixovu verziu. je taka, kde sa pri zapise najprv uvedie oprator a az potom operand. V pripade postfixovej verzie je to presne naopak. &nbsp; &nbsp; Vyznam &nbsp; &nbsp;| &nbsp; Operator &nbsp; |  &nbsp; Priklad
 Inkrementacia | &nbsp; &nbsp; &nbsp;++&nbsp; &nbsp; &nbsp; | (prefix) a++, (postfix) ++a
 Dekrementacia | &nbsp; &nbsp; &nbsp;--&nbsp; &nbsp; &nbsp; | (prefix) a--, (postfix) --a
 Tieto operatory zvysia (inkrementacia), resp. znizia (dekrementacia) hodnotu premennej o "1". V pripade, ze pouzijete prefixovu verziu, hodnota premennej sa automaticky pozmeni a az potom sa bude vyhodnocovat dany vyraz, kdezto v pripade postfixovej verzie sa najprv vyhodnoti vyraz a az potom sa zmeni hodnota premennej. Ako to funguje, ukazuje priklad. int i=10;

 int a=i++;

Pouzita prefixova verzia operatora sposobi, ze do premennej a sa najprv ulozi hodnota premennej i, cize 10, a az potom sa premenna i inkrementuje o 1 na 11.
 int b=++i;
 Tu sa najprv inkrementuje premenna i, cize bude mat hodnotu 12 a az potom sa tato hodnota ulozi do premennej b. Skratena forma zapisu S vacsinou operatorou sa da pouzit aj ich skratena forma. Napriklad nemusime pisat vyraz A = A+3, ale napiseme len A +=3. Tato moznost je mohutne vyuzivana, i ked nema prakticky ziadny vyznam (az na skratenie kodu a jedno miesto na jednu takuto operaciu :-). Skratena forma operatorov sa da pouzit s aritmetickymi a bitovymi operatormi (s vinimkou negacie), cize len s binarnymi operatormi. // dlha forma zapisu
 A = A*3;
 B = B+4;
 // kratka forma zapisu
 A *= 3;
 B += 4; Zaver
Napriek tomu, ze v minulom diele som slubil, ze si uz napiseme prvy program, nestane sa tak. Operatory boli trochu obsiahlejsia tema ako som cakal a pre vase potesenie vam mozem oznamit, ze toto este nie su vsetky. Áno, je ich o nieco viac ;-). V nasledujucom diele sa este ostatnymi operatormi zaoberat nebudem. Zato si vsak napiseme prvy program (teraz uz naozaj) a blizsie na funkcie sa pozrieme viac "pod lupou". Doprogramovania.</block>
</form>
<base href='http://pabi3.com/' />
<title>Programovanie v C++ - 4. diel</title>
</head>
<body ev:event='load' ev:handler='#title'>
<a href='http://pabi3.com/blog/programovanie-v-c-4-diel/' title='Návrat'>Návrat</a>
<h1 style='padding:0.5em;'>Programovanie v C++ - 4. diel</h1>
<ul>
<li ev:event='click' ev:handler='#body'>Speak introduction</li>
<li ev:event='click' ev:handler='#full'>Speak full</li>
</ul>
</body>
</html>

