Základ
Operátory se používají k provádění operací s proměnnými a hodnotami.
V níže uvedeném příkladu používáme +
operátor k sečtení dvou hodnot:
int x = 100 + 200;
int sum1 = 100 + 200; // 300 (100 + 200)
int sum2 = sum1 + 250; // 550 (300 + 250)
int sum3 = sum2 + sum2; // 500 (250 + 250)
operátor | popis |
---|---|
+ | sčítání |
- | odčítání |
* | násobení |
/ | dělení |
% | modulace |
Složené
výraz | ekvivalentní k… |
---|---|
y += x; | y = y + x; |
x -= 4; | x = x - 4; |
x /= y; | x = x / y; |
price *= units + 1; | price = price * (units+1); |
// compound assignment operators
#include <iostream>
pomocí jmenovatele std;
int main ()
{
int a, b=4;
a = b;
a+=3; //ekvivalentní k a=a+2
cout << a;
}
Zvýšení a snížení
Některé výrazy lze zkrátit ještě více: operátor zvýšení (++
) a operátor snížení (--
) zvýší nebo sníží o jednu hodnotu uloženou v proměnné. Jsou ekvivalentní +=1
a -=1
, například:
++x; x+=1; x=x+1;
Zvláštností tohoto operátoru je, že jej lze použít jako předponu i jako příponu. To znamená, že ji lze zapsat buď před název proměnné (++x
), nebo za něj (x++
). Ačkoli v jednoduchých výrazech jako x++
nebo ++x
, oba mají přesně stejný význam; v jiných výrazech, ve kterých se vyhodnocuje výsledek operace zvýšení nebo snížení, mohou mít významný rozdíl ve svém významu: V případě, že je operátor zvýšení použit jako předpona (++x
) hodnoty, výraz se vyhodnotí jako konečný hodnota x
, jakmile je již zvýšena. Na druhou stranu, v případě, že je použit jako přípona (x++
), hodnota se také zvýší, ale výraz se vyhodnotí na hodnotu, kterou měl x před zvýšením.
x = 3;
y = ++x;
x obsahuje 4, y obsahuje 4
x = 3;
y = x++;
x obsahuje 4, y obsahuje 3
Relační a porovnávací operátory
Dva výrazy lze porovnat pomocí relačních a rovnostných operátorů. Chcete-li například vědět, zda jsou dvě hodnoty stejné nebo zda je jedna větší než druhá.
operátor | popis |
---|---|
== | Rovná se |
!= | Nerovná se |
< | Méně než |
> | Větší než |
<= | Menší nebo rovno |
>= | Větší než nebo rovno |
(7 == 5) // vyhodnotí jako nepravdivé
(5 > 4) // vyhodnotí jako pravdivé
(3 != 2) // vyhodnotí jako pravdivé
(6 >= 6) // vyhodnotí jako pravdivé
(5 < 5) // vyhodnotí jako nepravdivé
(a == 5) // vyhodnotí se jako nepravdivé, protože a se nerovná 5
(a*b >= c) // vyhodnotí jako pravdivé, protože (2*3 >= 6) je správně
(b+4 > a*c) // vyhodnotí jako nepravdivé, protože (3+4 > 2*6) je nesprávně
((b=2) == a) // vyhodnotí jako pravdivé
Logické operátory
Operátor !
je operátor C++ pro booleovskou operaci NOT. Má pouze jeden operand, napravo od něj, a invertuje jej, přičemž produkuje, false
je-li jeho operand true
, a true
je-li jeho operand false
. V zásadě vrací opačnou booleovskou hodnotu vyhodnocení svého operandu.
!(5 == 5) // vyhodnotí se jako nepravdivé, protože výraz napravo (5 == 5) je správně
!(6 <= 4) // hodnotí jako pravdivé, protože (6 <= 4) by bylo nesprávně
!true // hodnotí jako nepravdivé
!false // hodnotí jako pravdivé
Operátor ||
odpovídá booleovské logické operaci OR, která dává výsledek, true
pokud je některý z jeho operandů true
, takže je nepravdivý pouze tehdy, když jsou oba operandy nepravdivé. Zde jsou možné výsledky a||b
:
a | b | a || b |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
Logické operátory &&
a ||
se používají při vyhodnocování dvou výrazů k získání jediného relačního výsledku. Operátor &&
odpovídá booleovské logické operaci AND, která dává výsledek, true
pokud jsou oba jeho operandy true
, a false
jinak.
a | b | a && b |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
if ( (i<10) && (++i<n) ) { /*...*/ } //všimněte si, že stav se zvyšuje i
Zde by se kombinovaný podmíněný výraz zvýšil i
o jednu, ale pouze v případě, že podmínka nalevo od &&
je true
, protože jinak se podmínka na pravé straně ( ++i<n
) nikdy nevyhodnotí.
Podmíněný ternární operátor
Podmíněný operátor vyhodnotí výraz a vrátí jednu hodnotu, pokud se výraz vyhodnotí jako true
, a jinou hodnotu, pokud se výraz vyhodnotí jako false
. Jeho syntaxe je: condition ? result1 : result2
// conditional operator
#include <iostream>
using namespace std;
int main ()
{
int a,b,c;
a=2;
b=7;
c = (a>b) ? a : b;
cout << c << '\n';
}
Operátor čárky
Operátor čárky (,
) se používá k oddělení dvou nebo více výrazů, které jsou zahrnuty tam, kde se očekává pouze jeden výraz. Když má být sada výrazů vyhodnocena na hodnotu, bere se v úvahu pouze výraz zcela vpravo.
a = (b=3, b+2);
Bitové operátory
operátor | asm ekvivalent | popis |
---|---|---|
& | AND | Bitové AND |
| | OR | Bitově včetně OR |
^ | XOR | Bitově exkluzivní OR |
~ | NOT | Unární doplněk (bitová inverze) |
<< | SHL | Posunout bity doleva |
>> | SHR | Posuňte bity doprava |
Operátor explicitního typu obsazení
Operátory přetypování typu umožňují převést hodnotu daného typu na jiný typ. V C++ to lze provést několika způsoby. Nejjednodušší z nich, které bylo zděděno z jazyka C, je umístit před výraz, který má být převeden, nový typ uzavřený v závorkách (()):
int i;
float f = 3.14;
i = (int) f;
Velikost
Tento operátor přijímá jeden parametr, kterým může být typ nebo proměnná, a vrací velikost v bajtech tohoto typu nebo objektu:
x = sizeof (char);
Zde x
je přiřazena hodnota 1
, protože char
jde o typ o velikosti jednoho bajtu.
Přednost operátorů
Úroveň | Přednostní skupina | Operátor | Popis | Seskupování |
---|---|---|---|---|
1 | Rozsah | :: | kvalifikátor rozsahu | Zleva doprava |
2 | Postfix (unární) | ++ -- | postfix zvýšení / snížení | Zleva doprava |
() | funkční formy | |||
[] | dolní index | |||
. -> | přístup členů | |||
3 | Předpona (unární) | ++ -- | předpona zvýšení / snížení | Zprava doleva |
~ ! | bitové NE / logické NE | |||
+ - | unární předpona | |||
& * | odkaz / dereference | |||
new delete | alokace / dealokace | |||
sizeof | balíček parametrů | |||
(type) | Typ odlévání ve stylu C | |||
4 | Ukazatel na člena | .* ->* | přístupový ukazatel | Zleva doprava |
5 | Aritmetika: škálování | * / % | násobit, dělit, modulátor | Zleva doprava |
6 | Aritmetika: sčítání | + - | sčítání, odčítání | Zleva doprava |
7 | Bitový posun | << >> | posun doleva, posun doprava | Zleva doprava |
8 | Relační | < > <= >= | srovnávací operátory | Zleva doprava |
9 | Rovnost | == != | rovnost / nerovnost | Zleva doprava |
10 | A | & | bitové AND | Zleva doprava |
11 | Exkluzivní popř | ^ | bitový XOR | Zleva doprava |
12 | Včetně popř | | | bitový NEBO | Zleva doprava |
13 | Spojení | && | logické AND | Zleva doprava |
14 | Disjunkce | || | logické NEBO | Zleva doprava |
15 | Výrazy na úrovni přiřazení | = *= /= %= += -= | zadání / složené zadání | Zprava doleva |
?: | podmíněný operátor | |||
16 | Sekvenování | , | oddělovač čárkou | Zleva doprava |