Operadores C# (Referência de C#)C# operators (C# reference)

O C# oferece vários operadores predefinidos, compatíveis com os tipos internos.C# provides a number of operators supported by the built-in types. Por exemplo, os operadores aritméticos executam operações aritméticas com operandos numéricos, já os operadores lógicos boolianos executam operações lógicas com operandos bool.For example, arithmetic operators perform arithmetic operations with numeric operands and Boolean logical operators perform logical operations with the bool operands. Determinados operadores podem ser sobrecarregados.Certain operators can be overloaded. Com a sobrecarga de operador, você pode especificar o comportamento do operador para os operandos de um tipo definido pelo usuário.With operator overloading, you can specify the operator behavior for the operands of a user-defined type.

Em uma expressão, a precedência e a associação dos operadores determinam a ordem na qual as operações são executadas.In an expression, operator precedence and associativity determine the order in which the operations are performed. Você pode usar parênteses para alterar a ordem de avaliação imposta pela prioridade e pela associação dos operadores.You can use parentheses to change the order of evaluation imposed by operator precedence and associativity.

Precedência do operadorOperator precedence

Em uma expressão com vários operadores, os operadores com maior precedência são avaliados antes dos operadores com menor precedência.In an expression with multiple operators, the operators with higher precedence are evaluated before the operators with lower precedence. No exemplo a seguir, a multiplicação é executada primeiro porque tem uma precedência mais alta do que a adição:In the following example, the multiplication is performed first because it has higher precedence than addition:

var a = 2 + 2 * 2;
Console.WriteLine(a); //  output: 6

Use parênteses para alterar a ordem de avaliação imposta pela precedência do operador:Use parentheses to change the order of evaluation imposed by operator precedence:

var a = (2 + 2) * 2;
Console.WriteLine(a); //  output: 8

A tabela a seguir lista os operadores C#, começando com a precedência mais alta até a mais baixa.The following table lists the C# operators starting with the highest precedence to the lowest. Os operadores em cada linha têm a mesma precedência.The operators within each row have the same precedence.

OperadoresOperators Categoria ou nomeCategory or name
x.y, x?.y, x?[y], f(x), a[i], x++, x--, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x->yx.y, x?.y, x?[y], f(x), a[i], x++, x--, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x->y PrimáriaPrimary
+ x, -x, !x, ~ x, + + x, --x, ^ x, (t) x, Await, & x, * x, true e false+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true and false UnárioUnary
x.. Iarx..y IntervaloRange
x * y, x / y, x % yx * y, x / y, x % y MultiplicativoMultiplicative
x + y, x – yx + y, x – y AditivoAdditive
x << y, x >> yx << y, x >> y ShiftShift
x < y, x > y, x <= y, x >= y, is, asx < y, x > y, x <= y, x >= y, is, as Teste de tipo e relacionalRelational and type-testing
x == y, x != yx == y, x != y IgualdadeEquality
x & y AND lógico booliano ou AND lógico bit a bitBoolean logical AND or bitwise logical AND
x ^ y XOR lógico booliano ou XOR lógico bit a bitBoolean logical XOR or bitwise logical XOR
x | y OR lógico booliano ou OR lógico bit a bitBoolean logical OR or bitwise logical OR
x && yx && y AND condicionalConditional AND
x || yx || y OR condicionalConditional OR
x ?? yx ?? y Operador de coalescência nulaNull-coalescing operator
c ? t : fc ? t : f Operador condicionalConditional operator
x = y, x + = y, x-= y, x * = y, x/= y, x% = y, x & = y, x |= y, x ^ = y, x < < = y, x > > = y, x?? = y, 4x = y, x += y, x -= y, x *= y, x /= y, x %= y, x &= y, x |= y, x ^= y, x <<= y, x >>= y, x ??= y, => Declaração de atribuição e lambdaAssignment and lambda declaration

Associação de operadorOperator associativity

Quando os operadores têm a mesma precedência, a associação dos operadores determina a ordem na qual as operações são executadas:When operators have the same precedence, associativity of the operators determines the order in which the operations are performed:

  • Os operadores associativos esquerdos são avaliados na ordem da esquerda para a direita.Left-associative operators are evaluated in order from left to right. Exceto para os operadores de atribuição e os operadores de União nulo, todos os operadores binários são associativos à esquerda.Except for the assignment operators and the null-coalescing operators, all binary operators are left-associative. Por exemplo, a + b - c é avaliado como (a + b) - c.For example, a + b - c is evaluated as (a + b) - c.
  • Os operadores associativos direitos são avaliados na ordem da direita para a esquerda.Right-associative operators are evaluated in order from right to left. Os operadores de atribuição, os operadores de União nula e o operador condicional ?: são associativos à direita.The assignment operators, the null-coalescing operators, and the conditional operator ?: are right-associative. Por exemplo, x = y = z é avaliado como x = (y = z).For example, x = y = z is evaluated as x = (y = z).

Use parênteses para alterar a ordem de avaliação imposta pela associação de operador:Use parentheses to change the order of evaluation imposed by operator associativity:

int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}");  // output: a = 1, b = 6

Avaliação do operandoOperand evaluation

Sem considerar a relação com a precedência e a associação de operadores, os operandos em uma expressão são avaliados da esquerda para a direita.Unrelated to operator precedence and associativity, operands in an expression are evaluated from left to right. Os exemplos a seguir demonstram a ordem em que os operadores e os operandos são avaliados:The following examples demonstrate the order in which operators and operands are evaluated:

ExpressãoExpression Ordem de avaliaçãoOrder of evaluation
a + b a, b, +a, b, +
a + b * c a, b, c, *, +a, b, c, *, +
a / b + c * d a, b, /, c, d, *, +a, b, /, c, d, *, +
a / (b + c) * d a, b, c, +, /, d, *a, b, c, +, /, d, *

Normalmente, todos os operandos do operador são avaliados.Typically, all operator operands are evaluated. Alguns operadores avaliam os operandos condicionalmente.Some operators evaluate operands conditionally. Ou seja, o valor do primeiro operando de tal operador define se (ou quais) outros operandos devem ser avaliados.That is, the value of the first operand of such an operator defines if (or which) other operands should be evaluated. Esses operadores são os operadores lógicos condicionais and (&&) e or (||) , os operadores de União nula ?? e ??=, os operadores condicionais nulos ?. e ?[]e o operador condicional 1.These operators are the conditional logical AND (&&) and OR (||) operators, the null-coalescing operators ?? and ??=, the null-conditional operators ?. and ?[], and the conditional operator ?:. Confira a descrição de cada operador para obter mais detalhes.See the description of each operator for more details.

Especificação da linguagem C#C# language specification

Para obter mais informações, confira a seção Operadores da Especificação da linguagem C#.For more information, see the Operators section of the C# language specification.

Consulte tambémSee also