Jazyk C - operátory: Rozdiel medzi revíziami
Riadok 74: | Riadok 74: | ||
==Bitové operátory== | ==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. | |
− | |||
− | 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. | ||
<source lang="c"> | <source lang="c"> | ||
//A = B00110101 | //A = B00110101 | ||
Riadok 83: | Riadok 81: | ||
</source> | </source> | ||
− | + | ;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. | |
− | |||
− | 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. | ||
<source lang="c"> | <source lang="c"> | ||
//A = B00110101 | //A = B00110101 | ||
Riadok 94: | Riadok 90: | ||
</source> | </source> | ||
− | + | ;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.:<source lang="c"> | |
00110101 | 00110101 | ||
&10100110 | &10100110 | ||
Riadok 106: | Riadok 102: | ||
</source> | </source> | ||
− | + | ;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.:<source lang="c"> | |
00110101 | 00110101 | ||
|10100110 | |10100110 | ||
Riadok 118: | Riadok 114: | ||
</source> | </source> | ||
− | + | ;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.:<source lang="c"> | |
00110101 | 00110101 | ||
^10100110 | ^10100110 | ||
Riadok 130: | Riadok 126: | ||
</source> | </source> | ||
− | + | ;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.:<source lang="c"> | |
00110101 | 00110101 | ||
~ | ~ | ||
Riadok 141: | Riadok 137: | ||
x = ~A; | x = ~A; | ||
</source> | </source> | ||
− | |||
==Relačné operátory== | ==Relačné operátory== |
Verzia zo dňa a času 15:28, 26. máj 2020
Obsah
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 | ? : |
Učebné texty
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 |