C++ Porovnávací Operátory

Jste zde:
Odhadovaná doba čtení: 3 min

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átorpopis
+sčítání
-odčítání
*násobení
/dělení
%modulace

Složené

výrazekvivalentní 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-=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átorpopis
==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, falseje-li jeho operand true, a trueje-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, truepokud 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:

aba || b
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

Logické operátory &&||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, truepokud jsou oba jeho operandy true, a falsejinak. 

aba && b
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse
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 io 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átorasm ekvivalentpopis
&ANDBitové AND
|ORBitově včetně OR
^XORBitově exkluzivní OR
~NOTUnární doplněk (bitová inverze)
<<SHLPosunout bity doleva
>>SHRPosuň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 xje přiřazena hodnota 1, protože charjde o typ o velikosti jednoho bajtu.

Přednost operátorů

ÚroveňPřednostní skupinaOperátorPopisSeskupování
1Rozsah::kvalifikátor rozsahuZleva doprava
2Postfix (unární)++ --postfix zvýšení / sníženíZleva doprava
()funkční formy
[]dolní index
. ->přístup členů
3Předpona (unární)++ --předpona zvýšení / sníženíZprava doleva
~ !bitové NE / logické NE
+ -unární předpona
& *odkaz / dereference
new deletealokace / dealokace
sizeofbalíček parametrů
(type)Typ odlévání ve stylu C
4Ukazatel na člena.* ->*přístupový ukazatelZleva doprava
5Aritmetika: škálování* / %násobit, dělit, modulátorZleva doprava
6Aritmetika: sčítání+ -sčítání, odčítáníZleva doprava
7Bitový posun<< >>posun doleva, posun dopravaZleva doprava
8Relační< > <= >=srovnávací operátoryZleva doprava
9Rovnost== !=rovnost / nerovnostZleva doprava
10A&bitové ANDZleva doprava
11Exkluzivní popř^bitový XORZleva doprava
12Včetně popř|bitový NEBOZleva doprava
13Spojení&&logické ANDZleva doprava
14Disjunkce||logické NEBOZleva doprava
15Výrazy na úrovni přiřazení= *= /= %= += -=
>>= <<= &= ^= |=
zadání / složené zadáníZprava doleva
?:podmíněný operátor
16Sekvenování,oddělovač čárkouZleva doprava
Byl tento článek užitečný?
Nelíbí 0
Zobrazeno: 2
Back to top button