Relační operátory a operátory rovnosti jazyka C
Operátory binární relace a operátory rovnosti porovnávají svůj první operand s jejich druhým operandem pro otestování platnosti zadané relace.Výsledek výrazu relace bude 1, jestliže nabývá testovaná relace hodnoty true a 0 pokud bude false.Typ výsledku je int.
Syntax
výraz relace:
výraz posunutívýraz relace < výraz posunutí
výraz relace > výraz posunutí
výraz relace <= výraz posunutí
výraz relace >= výraz posunutí
výraz rovnosti:
výraz relacevýraz rovnosti == výraz relace
výraz rovnosti != výraz relace
Operátory relace a rovnosti testují následující relace:
Operátor |
Otestovaná relace |
---|---|
< |
První operand menší než druhý operand. |
> |
První operand větší než druhý operand. |
<= |
První operand menší nebo roven druhému operandu. |
>= |
První operand větší nebo roven druhému operandu. |
== |
Prvního operandu rovnající se druhému operandu |
!= |
Prvního operandu nerovnající se druhému operandu |
První čtyři operátory ve výše uvedeném seznamu mají vyšší prioritu než operátory rovnosti (== a !=).Informace o přednosti operandů lze nalézt v tabulce Přednost a asociativita operátorů jazyka C.
Operandy mohou mít integrální nebo plovoucí typ, nebo typ ukazatele.Typy operandů mohou být různé.Relační operátory provádějí obvyklé aritmetické převody na integrálních typech operandu a na typech s pohyblivou řádovou čárkou.Kromě toho lze použít následující kombinace typů operandu spolu s operátory relace a rovnosti:
Oba operandy operátoru relace a rovnosti mohou odkazovat na stejný typ.Výsledek operátorů rovnosti (==) a nerovnosti (!=) označuje, zda oba odkazy adresují stejné umístění v paměti.U operátorů relace (<, >, <= a >=), označuje výsledek porovnání relativní pozice dvou adres v paměti objektů, na které je odkazováno.Operátory relace porovnávají pouze posuny.
Porovnání ukazatelů je definováno pro části stejného objektu.Pokud ukazatele odkazují na členy pole, je porovnání ekvivalentní porovnání odpovídajících dolních indexů.Adresa prvního prvku pole je "menší než" adresa posledního prvku.V případě struktur jsou odkazy na členy struktury, které byly deklarovány pozděni, "větší než" odkazy na členy deklarované ve struktuře dříve.Odkazy na členy stejného sjednocení jsou totožné.
Hodnota ukazatele smí být porovnána s konstantou o hodnotě 0 na rovnost (==) nebo na nerovnost (!=).Ukazatel s hodnotou 0, se nazývá ukazatel "null", což znamená, že neodkazuje na platné umístění v paměti.
Operátory rovnosti podléhají pravidlům jako operátory relace, ale obsahují další možnosti: Ukazatel je možné porovnat s výrazem integrální konstanty s hodnotou 0 nebo s ukazatelem na void.Jsou-li oba ukazatelé nulovými ukazateli, jsou porovnáni jako totožní.Operátory rovnosti porovnávají segment a posun.
Příklady
Níže uvedené příklady ukazují operátory relace a rovnosti.
int x = 0, y = 0;
if ( x < y )
Vzhledem k tomu, že jsou x a y stejné, vrací výraz v tomto příkladu hodnotu 0.
char array[10];
char *p;
for ( p = array; p < &array[10]; p++ )
*p = '\0';
Část v tomto příkladu nastaví každý prvek array na konstantu znaku null.
enum color { red, white, green } col;
.
.
.
if ( col == red )
.
.
.
Tyto příkazy deklarují proměnnou výčtu s názvem col se značkou color.V každém okamžiku může proměnná obsahovat celočíselnou hodnotu 0, 1 nebo 2, což představuje jeden z prvků sady výčtu color: červená, bílá nebo zelená barva, v uvedeném pořadí.Pokud col obsahuje hodnotu 0 při vykonání příkazu if, všechny příkazy, které závisí na if budou provedeny.