Aritmetické operátory

Aritmetické operátory vykonávajú matematické operácie dvoch výrazov jednej alebo viacerých typov dát kategórii typu číselné dáta. Vyhodnocujú sa sprava doľava.


= operátor priradenia

Výrazy, ako už vieme, sú tvorené postupnosťou operátorov a operandov. Výraz predpisuje výpočet adresy alebo hodnoty. Ak upravíme napríklad známy vzťah

c=\sqrt{a^{2}+b^{ 2 }}

do syntakticky správneho zápisu v jazyku C

c = sqrt(a*a + b*b);

môžeme zreteľne ukázať niektoré významné vlastnosti operátora priradenia =. Na pravej strane operátoru priradenie sa nachádza výraz, ktorého vyhodnotením získame hodnotu tohto výrazu. Avšak na ľavej strane sa nachádza výraz (v našom prípade je to “len” premenná), ktorého vyhodnotením získame adresu. Na túto adresu, predstavujúcu začiatok pamäťového miesta pre umiestnenie hodnoty premennej c, je umiestnená hodnota z pravej strany priraďovacieho operátora

Ešte než si zadefinujeme uvádzané pojmy, nesmieme zabudnúť na dôležitú skutočnosť a to: výsledkom výrazu priradenia je hodnota. Čo to znamená? Napríklad možnosť elegantne riešiť inicializáciu viacerých premenných rovnakou hodnotou:

int a, b, c;
a = b = c = -1;

Nezabúdajme, že priraďovací operátor je asociatívny sprava doľava. Najprv sa teda vyhodnotí c = -1, výsledkom je hodnota -1, tá tvorí pravú stranu priradenia b = , ktorého výsledkom je opäť -1. A ako sa uvedená hodnota dostane do premennej a iste nie je treba popisovať. Vráťme sa však k naznačeným pojmom.

Adresový výraz (lvalue; l-hodnota) je výraz, ktorého výpočtom sa získa adresa v pamäti. Napríklad, ak je P nejaký výraz vyhodnotený ako nenulový ukazovateľ, tak *P je l-hodnota. V súvislosti s modifikátorom const rozlišujeme modifikovateľnú a nemodifikovateľnú l-hodnotu.

Hodnotový výraz (rvalue; p-hodnota) je výraz, ktorého výpočtom sa získa hodnota istého typu. Typ je jednoznačne určený typom operandov. Pretože sa najmä pri číselných výpočtoch často stretávame s operandmi rôznych typov, uveďme si pravidlá, ktoré určujú typ výsledku. Poznamenajme, že naplnenie pravidiel testujeme v uvedenom poradí:

Ak aspoň jeden z operandov je racionálneho typu, potom

  • Ak je jeden z operandov typu long double, je rovnako aj druhý operand konvertovaný na tento typ
  • Ak je jeden z operandov typu double, je rovnako aj druhý operand konvertovaný na tento typ
  • Ak je jeden z operandov typu float, je rovnako aj druhý operand konvertovaný na tento typ
  • Ak je jeden z operandov typu unsigned long, je rovnako aj druhý operand konvertovaný na tento typ
  • Ak je jeden z operandov typu long a druhý typu unsigned int, je druhý operand konvertovaný na typ long (16-bitový prekladač) alebo sú oba operandy konvertované na typ unsigned long (32-bitový prekladač)
  • Ak je jeden z operandov typu long, je rovnako aj druhý operand konvertovaný na tento typ
  • Ak je jeden z operandov typu unsigned int, je rovnako aj druhý operand konvertovaný na tento typ
  • Ak nie je splnená žiadna z predchádzajúcich podmienok, sú obidva operandy prevedené na typ int

Výrazy môžu vyvolávať aj vedľajšie efekty. ANSI norma nedoporučuje používať výrazy, ktoré behom vyhodnotenia spôsobujú viacnásobnú zmenu obsahu jedného pamäťového miesta. Napríklad:

cc = cc++ + 1;

Niektoré vedľajšie efekty môžu byť implementačne závislé, napr. výraz

a[i] = i++;

Operátoru priradenia sme sa venovali ako prvému v poradí. Dôvod je jednoduchý. Bez tohoto operátoru nemôžeme uchovať výsledky v premenných. Súčasne nám tento operátor bude slúžiť aj v nasledujúcich popisoch ďalších operátorov.


+  –  *  /  %  aritmetické operátory (aditívne a multiplikatívne)

Aritmetické operátory + – * / % predstavujú základné matematické operácie sčítanie, odčítanie, násobenie, delenie a zvyšku po (celo-číselnom) delení.

Najlepšou ukážkou bude iste príklad:

int o1 = 123, o2 = 456, o3 = 295, v1, v2, v3;
int c1 = 20000, c2 = 20001, vc;
    
                // výpočet hodnôt int           skutočné hodnoty               
v1 = o1 * o2;   // 123 * 456 = -9448            123 * 456 = 56088
v2 = o3 / 2;    // 259 / 2 = 147                295 / 2 = 147
v3 = o3 % 2;    // 259 % 2 = 1                  295 % 2 = 1
vc = c1 + c2;   // 20000 + 20001 = -25535       20000 + 20001 = 40001

Príklad ukazuje nielen inicializáciu hodnôt premenných “operandov” o1 o2 a o3, ale po prvých očakávaných výsledkoch aj neočakávané hodnoty. Tie sú spôsobené faktom aritmetického pretečenia. Ďalej je vhodné zdôrazniť, že vzhľadom na typ operandov int, je aj typ výsledku rovnakého typu (viď pravidla uvedené skôr). Z tohoto dôvodu je aj výsledok celo-číselný.

Pozrime sa teraz na výsledky aritmetických operácii, v ktorých argumenty sú opäť celo-číselné, ale ľavá strana je racionálneho typu.

int i, j;
float r, x;

j = i = 5;   // i = 5  j = 5
j *= i;      // j = 25
r = j / 3;   // r = 8.000000
x = j * 3;   // x = 75.000000

Rovnako aj na tomto príklade vidíme, že výpočet prebieha s hodnotami typov podľa spomínaných pravidiel a až potom je získaná p-hodnota konvertovaná do typu zodpovedajúceho l-hodnote. Preto podiel 25/3 dáva 8.0 a nie 8.333 .

Rovnakým spôsobom prebiehajú aritmetické operácie s racionálnymi hodnotami.

Ak chceme zmeniť poradie vyhodnotenia jednotlivých častí výrazu, použijeme na “pozmenenie priority” okrúhle zátvorky.

Tento text je preložený a upravený zo stránok arduino.cc pod licenciou Creative Commons Attribution-ShareAlike 3.0.

Výber na čítanie...

Tranzistor
Tranzistor

Tranzistor je základným stavebným prvkom skoro každého dnešného elektronického zariadenia. Základom tranzistora je kryštál polovodiča s dvoma priechodmi PN. Polovodičové priechody tranzistora vytvárajú štruktúru zodpovedajúcej spojenie dvoch polovodičových...

Čítať viac...

Arduino Yún
Arduino Yún

Arduino YÚN je dokonalá doska, ktorá sa používa pri navrhovaní pripojených zariadení a vo všeobecnosti aj projektov internet vecí. Spája silu Linuxu s používaním Arduino...

Čítať viac...

BME280 a BMP280 – meranie tlaku, teploty a vlhkosti
BME280 a BMP280 – meranie tlaku, teploty a vlhkosti

Na meranie atmosférického tlaku Arduinom je vhodný senzor BME280 alebo BMP280 od firmy Bosch. Senzor ideálny do domácej meteostanici. V nasledujúcom článku popíšem rozdiely, zapojenie a ukážkový program z knižnice. Po vyskúšaní merania teplôt a vlhkosti so senzormi...

Čítať viac...

Obľúbené produkty...

Keyestudio Nano IO Shield

9.09 EUR

8.18 EUR

Keyestudio Frog Robot Car Kit

56.54 EUR

53.99 EUR

Keyestudio Multi-purpose Shield V1

11.10 EUR

9.99 EUR

Vyhľadať články
Programovanie...
  • Globálne premenné

    Premenné aj funkcie majú svoj rozsah platnosti, čiže oblasť, v ktorej fungujú a v ktorej nie. Vid...

  • Dátové typy

    Celočíselné dátové typy môžu obsahovať modifikátory unsigned respektíve signed, čím môžeme požado...

  • Funkcie náhodných čísiel

    Náhodné čísla zvyčajne pozostávajú zo zložitých sérií algoritmov, ktoré sú štatisticky predvídate...

  • Goniometrické funkcie

    Goniometrické funkcie v matematike označuje termín používaný pre jednu zo šiestich funkcií veľkos...

  • Zložené operátory

    Použitie zložených priraďovacích operátorov zjednodušuje a sprehľadňuje zdrojový kód, no použitie...

Podpora webu
Na kávu už prispeli
Dátum Meno Suma
22.03.2025 Radoslav Kopera 5€
30.12.2024 Jozef Greš 5€
20.10.2024 Radovan Nosáľ 20€
02.10.2024 Milan Durkoš 10€
08.01.2024 Veres Dusan 10€
15.05.2023 Ivan Danis 10€
28.09.2022 Ivan Vrab 7€
14.05.2022 Nemcic Marian 10€
04.02.2022 Robert Bilko 5€
29.01.2022 Peter Buffa 5€
19.11.2021 Rastislav Rehak 5€
16.09.2021 Anton Strela 5€
13.09.2021 Juraj Jedlak 5€
02.09.2021 Michal Marek 7€
08.08.2021 František Uhrík 5€
21.07.2021 Juraj Hrdina 5€
25.03.2021 Jan Nemec 10€
16.03.2021 Igor Pavlov 5€
25.02.2021 Lukas Lacuch 5€
06.11.2020 Pavol Balint 5€
05.11.2020 Marek Horečný 5€
05.10.2020 Jan Kusnir 5€
27.04.2020 Jan Zuskin 15€
26.04.2020 Dušan Sojka 5€
24.02.2020 Juraj Lackanič 5€
22.01.2020 František Žilinec 10€
20.05.2018 Tomáš F. 2€
17.12.2018 Pavol P. 5€
QR Donate 10Eur