Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

Precedência e associatividade do operador C#

Precedência e associatividade do operador C#


Neste tutorial, você aprenderá sobre precedência e associatividade de operadores em C#. Isso nos dará uma ideia de como uma expressão é avaliada pelo compilador C#.

Precedência do operador C#


A precedência do operador é um conjunto de regras que define como uma expressão é avaliada. Em C#, cada operador C# tem uma prioridade atribuída e com base nessas prioridades, a expressão é avaliada.

Por exemplo , a precedência da multiplicação (*) operador é maior que a precedência da adição (+) operador. Portanto, a operação que envolve a multiplicação é realizada antes da adição.

Dê uma olhada na declaração abaixo.
int x = 4 + 3 * 5;

Qual será o valor de x depois de executar esta instrução?

O operando 3 está associado a + e * . Como dito anteriormente, a multiplicação tem uma precedência maior do que a adição. Então, a operação 3 * 5 é executado em vez de 4 + 3 . O valor da variável x será 19 .

Se a adição tiver uma precedência mais alta, 4 + 3 seria avaliado primeiro e o valor de x seria 35 .

Tabela de Precedência do Operador


Quanto maior a precedência do operador, mais alto ele aparece na tabela
Precedência do operador C#
Categoria Operadores
Incremento e decremento do Postfix ++, --
Incremento de prefixo, decremento e unário ++, --, +, -, !, ~
Multiplicativo *, /, %
Aditivo +, -
Mudar <<,>>
Relacional <, <=,>,>=
Igualdade ==, !=
Bit a bit E &
XOR bit a bit ^
OU bit a bit |
E lógico &&
OU lógico ||
Ternário ? :
Tarefa =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=,>>=

Os operadores de atribuição têm a precedência mais baixa, enquanto os operadores de incremento e decremento pós-fixados têm a precedência mais alta.

Exemplo 1:Precedência do Operador

using System;

namespace Operator
{
	class OperatorPrecedence
	{
		public static void Main(string[] args)
		{
			int result1;
			int a = 5, b = 6, c = 4;
			result1 = --a * b - ++c;
			Console.WriteLine(result1);

			bool result2;
			result2 = b >= c + a;
			Console.WriteLine(result2);
		}
	}
}

Ao executarmos o programa, a saída será:
19
False

Vamos entender como a expressão é avaliada no programa.

A precedência de -- e ++ é maior que * , e precedência de * é maior que - . Daí a afirmação,
result1 = --a * b - ++c;

é equivalente a
result1 = ((--a)*b)-(++c);

A expressão entre parênteses é sempre avaliada primeiro, não importa qual seja a precedência dos operadores fora dela.



Na próxima expressão, a precedência de + é maior que >= . Então, c e um é adicionado primeiro e a soma é comparada com b para produzir false .

Associatividade de operadores em C#


Na seção anterior, discutimos sobre a precedência do operador. Se dois operadores com precedência diferente forem usados, o operador com precedência mais alta será avaliado primeiro.

Mas e se ambos os operadores tiverem a mesma precedência?

Nesse caso, a expressão é avaliada com base na associatividade do operador (da esquerda para a direita ou da direita para a esquerda).

Por exemplo:
int a = 5, b = 6, c = 3;
int result = a * b / c;

Aqui, ambos * e / têm a mesma precedência. Mas como a associatividade desses operadores é da esquerda para a direita , a * b é avaliada primeiro e, em seguida, a divisão é realizada. O resultado final desta expressão será 10 .

Neste exemplo em particular, a associatividade realmente não importa. Porque mesmo que a divisão fosse realizada antes da multiplicação, o resultado não seria afetado.

Vamos dar uma olhada em outro exemplo.
int a = 5, b = 6, c = 3;
a = b = c;

A associatividade de = operador é da direita para a esquerda . Então o valor de c (ou seja, 3 ) é atribuído a b , e então o valor de b é atribuído a a . Então, depois de executar esta instrução, os valores de a , b e c será 3 .

A tabela abaixo mostra a associatividade dos operadores C#:
Associatividade de operadores em C#
Categoria Operadores Associatividade
Incremento e decremento do Postfix ++, -- Esquerda para Direita
Incremento de prefixo, decremento e unário ++, --, +, -, !, ~ Da direita para a esquerda
Multiplicativo *, /, % Esquerda para Direita
Aditivo +, - Esquerda para Direita
Mudar <<,>> Esquerda para Direita
Relacional <, <=,>,>= Esquerda para Direita
Igualdade ==, != Esquerda para Direita
Bit a bit E & Esquerda para Direita
XOR bit a bit ^ Esquerda para Direita
OU bit a bit | Esquerda para Direita
E lógico && Esquerda para Direita
OU lógico || Esquerda para Direita
Ternário ? : Da direita para a esquerda
Tarefa =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=,>>= Da direita para a esquerda

Quase todos os operadores têm associatividade da esquerda para a direita. Os operadores com associatividade da direita para a esquerda são:

Exemplo 2:Associatividade de Operadores

using System;
 
namespace Operator
{
	class OperatorPrecedence
	{
		public static void Main(string[] args)
		{
			int a = 5, b = 6, c = 3;
			int result = a * b / c;
			Console.WriteLine(result);

			a = b = c;
			Console.WriteLine("a = {0}, b = {1}, c = {2}", a, b, c);
		}
	}
}

Quando executamos o programa, a saída será:
10
a = 3, b = 3, c = 3

Linguagem C

  1. Palavras-chave e identificadores C#
  2. Operadores C#
  3. C# ternário (? :) Operador
  4. Classe e objeto C#
  5. Classe abstrata e método C#
  6. C# Classe Parcial e Método Parcial
  7. Classe e método selados em C#
  8. Operadores em C++ com Exemplo:O que é, Tipos e Programas
  9. C - Constantes e Literais
  10. C - Entrada e Saída