Jazyk C - operátory

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání

Operátor je symbol, ktorý hovorí kompilátoru, aby vykonával konkrétne matematické alebo logické funkcie. [1] Jeho návratový typ určený podľa typu vstupných hodnôt.

Operátory sa dajú podľa počtu vstupov rozdeliť na unárne, binárne a ternárne.

Unárne ++, --, -(zmena znamienka), !, ~, sizeof
Binárne +, -, *, /, %, &&, ||, <<, >>, &, |, ^, <, >, <=, >=, ==, !=, =
Ternárne ? :


Aritmetické operátory

Sčítanie +
Tento operátor slúži na sčítanie dvoch celých alebo reálnych čísiel. Jeho návratová hodnota je súčet daných čísiel. Vyhodnocuje sa zľava doprava.
x = A + B;
Rozdiel
Tento operátor slúži na odčítanie dvoch celých alebo reálnych čísiel. Jeho návratová hodnota je rozdiel ľavého a pravého čísla. Vyhodnocuje sa zľava doprava.
x = A - B;
Súčin *
Tento operátor slúži na násobenie dvoch celých alebo reálnych čísiel. Jeho návratová hodnota je súčin daných čísiel. Vyhodnocuje sa zľava doprava.
x = A * B;
Podiel /
Tento operátor slúži na delenie dvoch celých alebo reálnych čísiel. Jeho návratová hodnota je podiel ľavého a pravého čísla. Vyhodnocuje sa zľava doprava.
x = A / B;
Zvyšok po delení %
Tento operátor slúži na vypočítanie celočíselného zvyšku po delení celých čísiel. Jeho návratová hodnota sa nazýva modulo. Vyhodnocuje sa zľava doprava.
x = A * B;
Zmena znamienka -
Tento operátor slúži na zmenu znamienka daného čísla. Jeho návratová hodnota je dané číslo krát -1.
x = -A;
y = A * (-1); //ekvivalent
Inkrementácia ++
Tento unárny operátor slúži na zväčšenie daného čísla o 1.
A++; //hodnota A sa zväčší o 1.
++A; //Hodnota A sa tiež zväčší o 1.

vypis(A++); //zväčší hodnotu i o 1, ale vráti originálnu hodnotu, ktorú potom vypíše
vypis(++A); //najprv zväčší hodnotu i o 1, potom toto číslo vypíše
Dekrementácia --
Tento unárny operátor slúži na zmenšenie daného čísla o 1.
A--; //hodnota A sa zmenší o 1.
--A; //Hodnota A sa tiež zmenší o 1.

vypis(A--); //zmenší hodnotu i o 1, ale vráti originálnu hodnotu, ktorú potom vypíše
vypis(--A); //najprv zmenší hodnotu i o 1, potom toto číslo vypíše

Logické operátory

Logický súčin &&
Tento operátor slúži na vypočítanie logického súčinu dvoch čísiel. Jeho návratová hodnota môže byť len TRUE alebo FALSE. Vyhodnocuje sa zľava doprava.
x = A && B;
Logický súčet ||
Tento operátor slúži na vypočítanie logického súčtu dvoch čísiel. Jeho návratová hodnota môže byť len TRUE alebo FALSE. Vyhodnocuje sa zľava doprava.
x = A || B;
Negácia !
Tento operátor slúži na vypočítanie negácie jedného čísla. Jeho návratová hodnota môže byť len TRUE alebo FALSE.
x = !A;
Poznámka
Vstupné hodnoty logických operátorov môžu byť len TRUE (1) alebo FALSE (0), avšak v jazyku C/C++ sú všetky hodnoty okrem 0 považované za TRUE.

Bitové operátory

Bitový posun vľavo <<
Tento operátor slúži na posunutie bitov jedného čísla vľavo o zadaný počet (chýbajúce bity sa nahradia 0). Rovnaký výsledok sa dá dosiahnuť aj násobením daného čísla násobkami 2 (napr. A << 3 = A * 2 * 3). Vyhodnocuje sa zľava doprava.
//A = B00110101
x = A << 2;
//A = B11010100
Poznámka
V jazyku C/C++ poznáme viac foriem zápisu čísiel, buď napíšeme číslo v dekadickej sústave napr. 125, alebo v binárnej sústave napr. B01111101, alebo v hexadecimálnej sústave napr. 0x7D.
Bitový posun vpravo >>
Tento operátor slúži na posunutie bitov jedného čísla vpravo o zadaný počet (chýbajúce bity sa nahradia 0). Rovnaký výsledok sa dá dosiahnuť aj delením daného čísla násobkami 2 (napr. A >> 3 = A /( 2 * 3)). Vyhodnocuje sa zľava doprava.
//A = B00110101
x = A >> 2;
//A = B00001101
Bitový súčin &
Tento operátor vypočíta logický súčin každého jedného bitu v čísle. Vyhodnocuje sa zľava doprava.

Napr.:

 00110101
&10100110
---------
 00100100

Využíva sa najmä ak chceme zmeniť alebo získať určitý bit v čísle.

x = A & B;
Bitový súčet |
Tento operátor vypočíta logický súčet každého jedného bitu v čísle. Vyhodnocuje sa zľava doprava.

Napr.:

 00110101
|10100110
---------
 10110111

Využíva sa najmä ak chceme zmeniť alebo získať určitý bit v čísle.

x = A | B;
Bitový exkluzívny súčet ^
Tento operátor vypočíta exkluzívny súčet každého jedného bitu v čísle. Vyhodnocuje sa zľava doprava.

Napr.:

 00110101
^10100110
---------
 10010011

Využíva sa najmä pri šifrovaní.

x = A ^ B;
Bitová negácia ~
Tento operátor vypočíta logická negáciu každého jedného bitu v čísle. Vyhodnocuje sa zľava doprava.

Napr.:

 00110101
~
---------
 11001010
x = ~A;

Relačné operátory

Menšie ako <
Tento operátor porovnáva dve zadané čísla. Jeho návratová hodnota môže byť len TRUE alebo FALSE. Ak je ľavé číslo menšie ako pravé, tak vráti TRUE, inak FALSE. Vyhodnocuje sa zľava doprava.
A < B;
Väčšie ako >
Tento operátor porovnáva dve zadané čísla. Jeho návratová hodnota môže byť len TRUE alebo FALSE. Ak je ľavé číslo väčšie ako pravé, tak vráti TRUE, inak FALSE. Vyhodnocuje sa zľava doprava.
A > B;
Menšie alebo rovné ako <=
Tento operátor porovnáva dve zadané čísla. Jeho návratová hodnota môže byť len TRUE alebo FALSE. Ak je ľavé číslo menšie alebo rovné ako pravé, tak vráti TRUE, inak FALSE. Vyhodnocuje sa zľava doprava.
A <= B;
Väčšie alebo rovné ako >=
Tento operátor porovnáva dve zadané čísla. Jeho návratová hodnota môže byť len TRUE alebo FALSE. Ak je ľavé číslo väčšie alebo rovné ako pravé, tak vráti TRUE, inak FALSE. Vyhodnocuje sa zľava doprava.
A >= B;
Rovná sa ==
Tento operátor porovnáva dve zadané čísla. Jeho návratová hodnota môže byť len TRUE alebo FALSE. Ak je ľavé číslo rovnaké ako pravé, tak vráti TRUE, inak FALSE. Vyhodnocuje sa zľava doprava.
A == B;
Nerovná sa !=
Tento operátor porovnáva dve zadané čísla. Jeho návratová hodnota môže byť len TRUE alebo FALSE. Ak je ľavé číslo iné ako pravé, tak vráti TRUE, inak FALSE. Vyhodnocuje sa zľava doprava.
A != B;

Priraďovací operátor

Priradenie =

Operátor priradenia slúži na priradenie hodnoty do premennej. Môže byť použitý na akýkoľvek datový typ s jedinou podmienkou, že prvý parameter (ľava strana), musí byť prijímač hodnoty, napríklad premenná. v závislosti na programovací jazyk môžu byť rozdielne podmienky pre priradenie hodnoty do premenných, napríklad na základe závislosti na type.[2] Priradenie, rovnako ako ostatné operátory, má taktiež návratovú hodnotu a ňou je hodnota, ktorá bola priradená. Vyhodnocuje sa sprava doľava.

A = B + 1

Poznámka: V jazyku C/C++ sa pri používaní operátorov postupuje podľa priority operátorov, inak sa zväčša postupuje zľava doprava, napr.: A = A + 5 + B * 6 bude vypočítané ako x = B * 6; y = 5 + x; A = A + y.

Operátor a následné priradenie

Pre zjednodušenie programovania sa takmer všetky aritmetické a bitové operátory dajú nahradiť operátormi spojenými s priradením:

A = A + 2;  //A += 2;
A = A - 2;  //A -= 2;
A = A * 2;  // A *= 2;
A = A / 2;  //A /= 2;
A = A % 2;  //A %= 2;

A = A << 2; //A <<= 2;
A = A >> 2; //A >>= 2;
A = A & 2;  //A &= 2;
A = A | 2;  //A |= 2;
A = A ^ 2;  //A ^= 2;

Vyhodnocuje sa sprava doľava.

Miskuidné operátory

Veľkosť premennej sizeof(x)
Tento operátor vráti počet bajtov, ktoré daný dátový typ zaberá v pamäti RAM.
x = sizeof(int); //Zvyčajne vráti hodnotu 4 (závisí od architektúry procesora)
byte a;
x = sizeof(a); //Vráti hodnotu 1, pretože byte zaberá iba jeden bajt
byte b[5];
x = sizeof(b); //Vráti hodnotu 5, pretože pole b zaberá 5 bajtov
x = sizeof(b[0]); //Vráti hodnotu 1, pretože byte zaberá iba jeden bajt

Podmienený operátor ? : Tento operátor najprv zistí, či podmienka pred ? platí. Ak áno, tak vráti hodnotu medzi ? a :, inak vráti hodnotu za : .

x = (1 > 2)?5:6; //Vráti hodnotu 6
x = (1 < 2)?5:6; //Vráti hodnotu 5

Ostatné operátory Poznáme ešte dva operátory: referenciu (&) a dereferenciu (*). Tieto operátory sú bližšie vysvetlené v sekii Jazyk C - smerník (pointer).

Priorita operátorov

Tabuľka nižšie zobrazuje prioritu operátorov a smer zápisu v jazyku C.

Prednosť Operátor Popis Zápis
1 ++ -- Inkrementácia a dekrementácia - prípona zľava doprava
() Volanie funkcie
[] Indexovanie poľa
. Prístup do štruktúry alebo do union
-> Prístup do štruktúry alebo do union cez smerník
2 ++ -- Inkrementácia a dekrementácia - predpona sprava doľava
+ - Unárne plus a mínus
! ~ logické alebo bitové NOT
(type) Konverzia dátového typu
* Dereferencia (smerník)
& Referencia (smerník)
sizeof Veľkosť premennej
3 * / % Násobenie, delenie a modulo zľava doprava
4 + - Súčet, rozdieľ
5 << >> Bitový posun vľavo a vpravo
6 < <= Relačný operátor väčšie ako a väčšie alebo rovné ako
> >= Relačný operátor menšie ako a menšie alebo rovné ako
7 == != Relačný operátor rovná sa a nerovná sa
8 & Bitový súčin
9 ^ Bitový exkluzívny súčet
10 | Bitový súčet
11 && Logický súčin
12 || Logický súčet
13 ? : Ternárna podmienka sprava doľava
14 = Priradenie
+= -= Operátor a následné priradenie
*= /= %=
<<= >>=
&= ^= |=
15 , Čiarka zľava doprava

Referencie