Aritmetické operátory
C++ 11

image_printTisk

Tento článek by měl čtenáři nastínit používání základních aritmetických operátorů v jazyce C++. Je dobré upozornit, že C++ disponuje širší sadou operátorů, než se třeba pojednává ve středoškolské matematice, a dále je třeba zmínit, že jejich zápis se od matematiky liší. Představíme si základní unární a binární operátory a pak i operátory jiné, specifické pro programovací jazyky, které jsou “zkratkami”  zápisů různých výrazů.

Jako první začneme s binárními aritmetickými operátory a ukážeme si na následujícím příkladu jejich odlišný zápis od matematiky.

int main() {
    int a = 11;
    int b = 2;
    int c = 0;

    c = a + b;    // Sčítání
    c = a - b;    // Odčítání
    c = a * b;    // Násobení je vyjádřené znakem "hvězdička"
    c = a / b;    // Dělení je vyjádřené znakem "lomítko"
    c = a % b;    // Zbytek po dělení je vyjádřen znakem "procento"

    c = (1 + a) * b; // Závorky se používají stejně jako v matematice

    return 0;
}

Jak je uvedeno v příkladu, násobení se v C++ vyjadřuje znakem “*”, dělení znakem “/” a zbytek po dělení znakem “%”. Je důležité ještě se zmínit o operátoru přiřazení vyjádřeného jedním znakem rovnosti. Existuje i druhý operátor vyjádřený dvěma znaky rovnosti “==”, který má v C++ jiný význam, je to operátor porovnání. Tento jev bývá častým zdrojem chyb ve zdrojových kódech, které se velmi špatně hledají. Naštěstí překladače mají v dnešní době schopnost rozpoznat, kdy může být provedena záměna těchto dvou operátorů na nezvyklém místě a mohou na to upozornit formou varování.

Nyní přesuňme pozornost k operátorům unárním. Jazyk C++ podporuje oba unární operátory, které známe z matematiky, tak si je jen krátce ukažme na následujícím příkladu.

int main() {
    int a = -5;
    int b = 0;

    b = +a;    // b je -5
    b = -a;    // b je nyní 5

    return 0;
}

Teď již přistoupíme k první sadě operátorů, které jsou specifické pro programovací jazyky. Jedná se o zkrácené formy výrazů například typu a = a + 5, který přičte k hodnotě proměnné a číslo 5. Vše si ukažme na následujícím příkladu.

int main() {
    int a = 10;
    int b = 2;

    a += 5;       // a = a + 5
    a -= b;       // a = a - b;
    a *= 3;       // a = a * 3;
    a /= b + 2;   // a = a / (b + 2)
    a %= 2;       // a = a % 2;

    return 0;
}

Příklad ukazuje zkrácené formy přiřazovacích operátorů, kde u každého řádku příslušného operátoru je uvedena v komentáři rozvinutá forma výrazu, kterou přiřazovací operátor představuje.

Nakonec si vysvětlíme operátory tzv. inkrementace a dekrementace. Tyto operátory jsou, zjednodušeně řečeno, zkratkami výrazů typů a = a + 1, respektive a = a – 1, tedy zvyšují, případně snižují hodnotu dané proměnné o hodnotu jedna. Viz následující příklad.

int main() {
    int a = 5;
    a++;    // Hodnota v proměnné a je 6
    a--;    // Hodnota v proměnné a je nyní opět 5
    return 0;
}

Jak plyne z příkladu, operátor ++ zvyšuje hodnotu proměnné, na kterou je aplikován, o číslo 1 a operátor naopak o číslo 1 hodnotu snižuje.

Situace je kolem těchto operátorů ale mnohem složitější. U těchto operátorů rozlišujeme verzi prefixovou a verzi postfixovou, syntakticky zaznačenou tak, zda stojí operátor před proměnnou resp. za ní. Při aplikaci na samostatnou proměnnou rozdíl ve významu není žádný, vše ale je jinak, pokud jsou tyto operátory součástí výrazu už jen v té nejjednodušší podobě, a to v kombinaci s operátorem přiřazení. Ukažme si vše na následujícím příkladu.

int main() {
    int a = 4;
    int b = 0;
    int c = 0;

    b = ++a;    // a má hodnotu 5, b má hodnotu 5
    c = b++;    // b má hodnotu 6, c má ale hodnotu 5
    c = --a;    // a má hodnotu 4, c má rovněž hodnotu 4
    
    return 0;
}

Vezměme napřed řádek b = ++a. Postup vyhodnocení je následující.

  1. Operátor stojí před proměnnou, zvyš tedy napřed hodnotu proměnné a o jedničku.
  2. Po té přiřaď hodnotu proměnné a do proměnné b.

V případě řádku c = b++ je postup ale jiný.

  1. Operátor proměnné b je postfixový, tedy stojí za proměnnou. Proto napřed přesuň hodnotu proměnné b do proměnné c.
  2. Teprve potom zvyš hodnotu proměnné b o hodnotu jedna.

V případě operátoru dekrementace je postup obdobný, jen s tím rozdílem, že hodnotu svojí proměnné snižuje.

Nakonec si ukážeme aplikaci těchto operátorů na složitějším výrazu. Viz následující příklad.

int main() {
    int a = 4, b = 6, c = 3;
    int d = 0;

    d = (--a + b++) * c--;

    return 0;
}

Popišme si postup vyhodnocení výrazu udávající hodnotu proměnné d.

  1. Napřed se vyhodnotí část výrazu v závorce.
  2. Operátor dekrementace u proměnné a je prefixový, proměnná a tedy bude obsahovat hodnotu 3.
  3. Jelikož operátor u proměnné b je postfixový, proto sečti proměnné v závorce, což dává výsledek 3 + 6 = 9.
  4. Nyní teprve inkrementuj hodnotu proměnné b, její hodnota tedy bude 7.
  5. Teď se dostáváme k násobení. Operátor dekrementace proměnné c je postfixový, proto napřed provedeme operaci násobení. Tedy 9 * 3 = 27.
  6. Teprve po operaci násobení bude snížena hodnota proměnné c o hodnotu jedna.
  7. Nakonec proběhne přiřazení výsledné hodnoty 27 do proměnné d.
image_printTisk
Aritmetické operátory
C++ 11
5 (100%) 1 hlasů

Související články

  • Logické operátory Tématem tohoto článku jsou logické operátory, které slouží ke skládání jednoduchých výrazů, i jejich složitějších variant, s aplikovaným relačním operátorem do logických podmínek. Budeme […]
  • Příkaz “if” – větvení běhu programu V tomto článku si probereme první příkaz pro řízení běhu programu. Jedná se příkaz if, který slouží pro větvení běhu programu na základě vyhodnocení nějakého logického výrazu. Seznámíme se […]
  • Relační operátory Tento článek pojednává o porovnávacích, jinak nazývané také relačních,  operátorech v jazyce C++. Souhrnně se o nich zmíníme, ukážeme si opět rozdíl jejich zápisu od klasické matematiky a […]
  • Datový typ “string” V tomto článku si představíme skupinu datových typů knihovny STL pro práci s texty. Seznámíme se s jejich inicializací, stejně tak si popíšeme další základní metody pro práci s touto […]
  • Vstup a výstup pomocí textové konzole V tomto článku se velmi podrobně seznámíme se vstupem a výstupem na textovou konzoli. Začneme popisem jednoduchého vstupu a výstupu a pak dále navážeme, jak se pomocí speciálních příkazů, […]
  • Práce se soubory pomocí knihovny STL V tomto článku si popíšeme základy práce se soubory pomocí knihovny STL. Práce se soubory pomocí této knihovny je mnohem snadnější, než pomocí staršího přístupu pomocí standardní knihovny […]