Operatori relazionali e operatori di uguaglianza CC Relational and Equality Operators

Gli operatori relazionali e di uguaglianza binari confrontano il primo operando con il secondo per testare la validità della relazione specificata.The binary relational and equality operators compare their first operand to their second operand to test the validity of the specified relationship. Il risultato di un'espressione relazionale è 1 se la relazione testata è true e 0 se è false.The result of a relational expression is 1 if the tested relationship is true and 0 if it is false. Il tipo del risultato è int.The type of the result is int.

SintassiSyntax

relational-expression:relational-expression:
shift-expressionshift-expression

relational-expression < shift-expressionrelational-expression < shift-expression

relational-expression > shift-expressionrelational-expression > shift-expression

relational-expression <= shift-expressionrelational-expression <= shift-expression

relational-expression >= shift-expressionrelational-expression >= shift-expression

equality-expression:equality-expression:
relational-expressionrelational-expression

equality-expression == relational-expressionequality-expression == relational-expression

equality-expression != relational-expressionequality-expression != relational-expression

Gli operatori relazionali e di uguaglianza testano le relazioni seguenti:The relational and equality operators test the following relationships:

OperatoreOperator Relazione testataRelationship Tested
< Primo operando minore del secondo operandoFirst operand less than second operand
> Primo operando maggiore del secondo operandoFirst operand greater than second operand
<= Primo operando minore o uguale al secondo operandoFirst operand less than or equal to second operand
>= Primo operando maggiore o uguale al secondo operandoFirst operand greater than or equal to second operand
== Primo operando uguale al secondo operandoFirst operand equal to second operand
!= Primo operando non uguale al secondo operandoFirst operand not equal to second operand

I primi quattro operatori nell'elenco sopra riportato hanno maggiore precedenza rispetto agli operatori di uguaglianza (== e !=).The first four operators in the list above have a higher precedence than the equality operators (== and !=). Per informazioni sulla precedenza, vedere la tabella Precedenza e associatività degli operatori C.See the precedence information in the table Precedence and Associativity of C Operators.

Gli operandi possono disporre di un tipo integrale, a virgola mobile o puntatore.The operands can have integral, floating, or pointer type. I tipi di operandi possono essere diversi.The types of the operands can be different. Gli operatori relazionali eseguono conversioni aritmetiche consuete su operandi di tipo integrale e a virgola mobile.Relational operators perform the usual arithmetic conversions on integral and floating type operands. Inoltre, è possibile utilizzare le seguenti combinazioni di tipi di operando con gli operatori relazionali e di uguaglianza:In addition, you can use the following combinations of operand types with the relational and equality operators:

  • Entrambi gli operandi di qualsiasi operatore relazionale o di uguaglianza possono essere puntatori allo stesso tipo.Both operands of any relational or equality operator can be pointers to the same type. Per gli operatori di uguaglianza (==) e di disuguaglianza (!=) il risultato del confronto indica se i due puntatori sono indirizzati alla stessa posizione di memoria.For the equality (==) and inequality (!=) operators, the result of the comparison indicates whether the two pointers address the same memory location. Per gli altri operatori relazionali (<, >, <= e >=) il risultato del confronto indica la posizione relativa dei due indirizzi di memoria degli oggetti a cui si fa riferimento.For the other relational operators (<, >, <=, and >=), the result of the comparison indicates the relative position of the two memory addresses of the objects pointed to. Gli operatori relazionali confrontano solo gli offset.Relational operators compare only offsets.

    Il confronto tra puntatori viene definito solo per le parti dello stesso oggetto.Pointer comparison is defined only for parts of the same object. Se i puntatori fanno riferimento ai membri di una matrice, il confronto è equivalente al confronto dei pedici corrispondenti.If the pointers refer to members of an array, the comparison is equivalent to comparison of the corresponding subscripts. L'indirizzo del primo elemento della matrice è "minore di" quello dell'ultimo elemento.The address of the first array element is "less than" the address of the last element. Nel caso di strutture, i puntatori ai membri della struttura dichiarati successivamente sono "maggiori dei" puntatori ai membri dichiarati nella struttura.In the case of structures, pointers to structure members declared later are "greater than" pointers to members declared earlier in the structure. I puntatori ai membri della stessa unione sono uguali.Pointers to the members of the same union are equal.

  • Un valore del puntatore può essere confrontato con il valore costante 0 per uguaglianza (==) o disuguaglianza (!=).A pointer value can be compared to the constant value 0 for equality (==) or inequality (!=). Un puntatore con un valore pari a 0 viene chiamato un puntatore "null", ovvero non indica una posizione di memoria valida.A pointer with a value of 0 is called a "null" pointer; that is, it does not point to a valid memory location.

  • Gli operatori di uguaglianza seguono le stesse regole degli operatori relazionali, ma supportano funzionalità aggiuntive: un puntatore può essere confrontato con un'espressione costante integrale con valore pari a 0 o a un puntatore a void.The equality operators follow the same rules as the relational operators, but permit additional possibilities: a pointer can be compared to a constant integral expression with value 0, or to a pointer to void. Se due puntatori sono entrambi puntatori null, vengono considerati uguali.If two pointers are both null pointers, they compare as equal. Gli operatori di uguaglianza confrontano segmento e offset.Equality operators compare both segment and offset.

EsempiExamples

Negli esempi riportati di seguito vengono illustrati gli operatori relazionali e di uguaglianza.The examples below illustrate relational and equality operators.

int x = 0, y = 0;  
if ( x < y )  

Poiché x e y sono uguali, l'espressione in questo esempio produce il valore 0.Because x and y are equal, the expression in this example yields the value 0.

char array[10];  
char *p;  

for ( p = array; p < &array[10]; p++ )  
    *p = '\0';  

Il frammento in questo esempio imposta ogni elemento array su una costante di carattere null.The fragment in this example sets each element of array to a null character constant.

enum color { red, white, green } col;  
   .  
   .  
   .  
   if ( col == red )  
   .  
   .  
   .  

Queste istruzioni dichiarano una variabile di enumerazione denominata col con il tag color.These statements declare an enumeration variable named col with the tag color. In qualsiasi momento, la variabile può contenere un intero pari a 0, 1 o 2, che rappresenta uno degli elementi dell'enumerazione impostata color: rispettivamente il colore rosso, bianco o verde.At any time, the variable may contain an integer value of 0, 1, or 2, which represents one of the elements of the enumeration set color: the color red, white, or green, respectively. Se l'elemento col contiene 0, quando viene eseguita l'istruzione if vengono eseguite tutte le eventuali istruzioni che dipendono da if.If col contains 0 when the if statement is executed, any statements depending on the if will be executed.

Vedere ancheSee Also

Operatori relazionali: <, >, <= e >= Relational Operators: <, >, <=, and >=
Operatori di uguaglianza: == e !=Equality Operators: == and !=