Programovanie v C++ - 4. diel

Seriál o programovaní v programovacom jazyku C++. V štvrtom diele pozrieme na zúbok operátorom.
Operátory
Operátory sú úplne neoddeliteľnou súčasťou každého modernejšieho programovacieho jazyka (1950 a novší ;-). Pomocou nich môžeme vykonávať matematické operácie typu sčítanie, odčítanie, násobenie a delenie a v prípade C++ dokonca aj vyhodnocovanie podmienok! Operátory možno rozdeliť na dve skupiny podľa toho, koľko majú operandov. Ak má operátor dva operandy je binárny, ak má operand jeden, je unárný.

Binárne operátory
Možno ich ďalej rozdeliť na aritmetické, relačné, logické a bitové.
 Aritmetické operátory

 +, -, *, /
 Základné matematiké operátory, ktoré pozná každý. Majú takú istú funkciu ako v skutočnom svete. To, či bude výsledok kladné, alebo záporné číslo závisí od typu operandov. Ak sú oba celočíslené, aj výsledok je celočíslený. Ak je jeden z operandov reálneho charakteru, aj výsledok na tom bude rovnako. Ak delíme dve celé čísla, výsledok sa bude zaokruhľovať.

%
 Operátor modulo slúži na získavanie celočísleného zvyšku po celočíslenom delení. Ak teda vykonáme operáciu 4%3, výsledkom bude číslo 1. 
 =
 Operátor priradenia. Slúži na priradenie hodnoty do premenných a dátových štruktúr.
 Relačné operátory

 >, <, >=, <=
 Základné matematiké operátory, ktoré pozná každý. Majú takú istú funkciu ako v skutočnom svete. To, či bude výsledok kladné, alebo záporné číslo závisí od typu operandov. Ak sú oba celočíslené, aj výsledok je celočíslený. Ak je jeden z operandov reálneho charakteru, aj výsledok na tom bude rovnako. Ak delíme dve celé čísla, výsledok sa bude zaokruhľovať.
 !=
 Význam operátoru je "nerovná sa". Používa sa pri porovnávaní a vyhodnocovaní výrazov v podmieňovacích príkazoch. K tomu sa však dostaneme až v niektorej z budúcich častí. 
 ==

Rovná sa. Použitie je rovnaké ako u predchádzajúceho operátoru.
Ako som už v prvom diele seriálu napísal, C++ je programovací jazyk na nižšej úrovni (pozor, nemyslí sa tým horšej!!!). Vďaka tomu programátor disponuje možnosťou pracovať s jednotlivými bitmi. Programátorovi to dáva väčšiu slobodu a moc pri písaní programov. Pri písaní nízkoúrovňových aplikácií (napr.operačný systém, ovládače) sú podobné operátory nutnosťou a preto sa takéto programy píšu spravidla v C++, alebo v assemblere (jazyk symboického zápisu inštrukcií).
 Logické operátory

 &&
 Logický súčet (AND). Výraz A&&B má rovnaký význam, ako keby ste povedali A a B.
 ||
 Logický súčin (OR). Jeho význam je rovnaký, ako význam slova alebo. Keď teda napíšete výraz A || B, znamená to A alebo B.
 !

Operátor negácie neguje akúkoľvek premennú. Napr. negáciou čísla 1 (00000001b) dostaneme číslo 254 (11111110b).
Ďalšími binárnymi operátormi sú operátory bitové. Hlavným rozdielom oproti ostatným typom operátorov je, že sú aplikovateľné iba na celé čísla a to, že pracujú na úrovni jednotlivých bitov.
 Bitové operátory

 <<, >>
 Bitový posun doľava a doprava.
 |, &, ^, ~
 Bitový súčet, súčin, exklusívny súčet a bitová negácia.
Operátor bitového posunu posunie bity smerom, do ktorého operátor ukazuje o toľko bitov, koľko určuje druhý operand. Pri posúvaní bitov môže dôjsť k situácii, keď bity posuniete doprava, alebo doľava príliš a tie potom "vypadnú".
 00000100b >> 2 = 00000001b = 1d
 00000100b << 2 = 00010000b = 16d
V tomto prípade boli bity posunúté až príliš a došlo k vypadnutiu jedného bitu vpravo (1), resp. vľavo (2).
(1) 00111100b >> 3 = 00000111b = 7d
 (2) 00111100b << 3 = 11100000b = 224d
Keď chcete sčítať čísla 6 a 3, jednoducho si v hlave poviete 6 plus 3 je 9. Na podobnom princípe fungujú aj operácie vykonávané aritmetickými operátormi. Bitové operátory ale pracujú na úrovni jednotlivých bitov (nuly a jednotky) a nad jednotlivými bitmi sa počítajú bitové operácie. Preto výsledkom operácie 6|3 nebude číslo 9, ale číslo 7!
  6d = 00000110b
  3d = 00000011b
  -------------------- bitový súčet
  7d = 00000111b
Pri bitovom súčte sa na nulu nastavia len tie bity, ktoré sú výsledkom logického súčinu dvoch nulových bitov. V opačnom prípade sa bit nastaví na jednotkový.
  6d = 00000110b
  3d = 00000011b
  -------------------- bitový súčin
  2d = 00000010b
Pri bitovom súčine sa na jednotku nastavia len tie bity, ktoré sú výsledkom logického súčinu dvoch jednotkových bitov. V opačnom prípade sa bit nastaví na nulový.
  6d = 00000110b
  3d = 00000011b
  -------------------- bitový exklusívny súčet
  5d = 00000101b
Pri bitovom exklusívnom súčte sa na jednotku nastavia jedine tie bity, ktoré sú výsledkom bitovej operácie bitov s rozdielnymi hodnotami, čiže operáciou s jedným nulovým a jedným nenulovým bitom.
  6d = 00000110b
  -------------------- bitová negácia
  249d = 11111001b
Pri bitovej negácii sa hodnoty jednotlivých bitov prehodia. To znamená, že nenulový bit sa stane nulovým a opačne.

Unárne operátory
Sú to operátory, ktoré majú len jeden operand. Tieto operátory mávajú prefixovú a postfixovú verziu. je taká, kde sa pri zápise najprv uvedie oprátor a až potom operand. V prípade postfixovej verzie je to presne naopak.
     Význam    |   Operátor   |    Príklad
 Inkrementácia |      ++      | (prefix) a++, (postfix) ++a
 Dekrementácia |      --      | (prefix) a--, (postfix) --a
Tieto operátory zvýšia (inkrementácia), resp. znížia (dekrementácia) hodnotu premennej o "1". V prípade, že použijete prefixovú verziu, hodnota premennej sa automaticky pozmení a až potom sa bude vyhodnocovať daný výraz, kdežto v prípade postfixovej verzie sa najprv vyhodnotí výraz a až potom sa zmení hodnota premennej. Ako to funguje, ukazuje príklad.
 int i=10;

 int a=i++;

Použitá prefixová verzia operátora spôsobí, že do premennej a sa najprv uloží hodnota premennej i, čiže 10, a až potom sa premenná i inkrementuje o 1 na 11.
 int b=++i;
 Tu sa najprv inkrementuje premenná i, čiže bude mať hodnotu 12 a až potom sa táto hodnota uloží do premennej b.

Skrátená forma zápisu
S väčšinou operátorou sa dá použiť aj ich skrátená forma. Napríklad nemusíme písať výraz A = A+3, ale napíšeme len A +=3. Táto možnosť je mohutne využívaná, i keď nemá prakticky žiadny význam (až na skrátenie kódu a jedno miesto na jednu takúto operáciu :-). Skrátená forma operátorov sa dá použiť s aritmetickými a bitovými operátormi (s vínimkou negácie), čiže len s binárnymi operátormi.
 // dlhá forma zápisu
 A = A*3;
 B = B+4;
 // krátka forma zápisu
 A *= 3;
 B += 4;

Záver
Napriek tomu, že v minulom diele som sľúbil, že si už napíšeme prvý program, nestane sa tak. Operátory boli trochu obsiahlejšia téma ako som čakal a pre vaše potešenie vám môžem oznámiť, že toto ešte nie sú všetky. Áno, je ich o niečo viac ;-).
V nasledujúcom diele sa ešte ostatnými operátormi zaoberať nebudem. Zato si však napíšeme prvý program (teraz už naozaj) a bližšie na funkcie sa pozrieme viac "pod lupou". Doprogramovania.
Alternatívne verzie: Text PDF Voice
Autor: Ribi · Kategória: Programovanie · Dátum: 31.08.2005 17:17

Komentáre

#1 DaL
23.07.2006 20:52
V 4. dieli C++ pri vysvetlovani bitovych sucinov a suctov su chyby v prikladoch:

3d = 00000110b - ma byt 6d
6d = 00000011b - ma byt 3d
--------- bitový súčet - to je sucin, nie sucet
00000010b = 2d

#2 admin Web E-mail
26.07.2006 20:00
admin Všetky chyby v článku sú už opravené, ďakujem [wink].

#3 shift Web E-mail
27.10.2008 21:12
" Logický súčet (AND)
Logický súčin (OR) "

Má to byť naopak => AND je logický súčin a OR je logický súčet!!!

Osobné údaje
Captcha
Odpíšte text z obrázku. Rozlišujú sa malé a veľké písmená.
Obsah
Možnosti