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.
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
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í:
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 + – * / % 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.
Arduino MEGA 2560 je navrhnutý pre komplexnejšie projekty. Má väčší priestor pre program, takže sa využíva pre 3D tlačiarne a projekty robotiky. To dáva projektom dostatok priestoru. K tejto doske nájdete aj rôzne shieldy. Medzi najpoužívanejšie patrí napr. ...
Editor plošných spojov EAGLE je užívateľsky prívetivý a výkonný nástroj pre návrh dosiek plošných spojov (DPS, PCB). Je široko používaný v priemysle a vývoji elektroniky...
Na meranie teploty a vlhkosti v interiéry som vyskúšal známe senzory DHT11 (modrý) a DHT22 (biely). V článku som spomenul rozdiely, zapojil senzory s Arduinom Nano, vyhľadal vhodnú knižnicu, vyskúšal nejaké tie programy a samozrejme niečo som i nafotil. ...