Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Приоритет операторов C# и ассоциативность

Приоритет и ассоциативность операторов C#

В этом уроке вы узнаете о приоритете операторов и ассоциативности в C#. Это даст нам представление о том, как выражение оценивается компилятором C#.

Приоритет оператора C#

Приоритет оператора — это набор правил, определяющих, как вычисляется выражение. В C# каждому оператору C# назначается приоритет, и на основе этих приоритетов вычисляется выражение.

Например , приоритет умножения (*) оператор выше, чем приоритет добавления (+) оператор. Поэтому операция умножения выполняется перед сложением.

Взгляните на заявление ниже.

int x = 4 + 3 * 5;

Каким будет значение x после выполнения этого оператора?

Операнд 3 связан с + и * . Как было сказано ранее, умножение имеет более высокий приоритет, чем сложение. Итак, операция 3 * 5 выполняется вместо 4 + 3 . Значение переменной x будет 19 .

Если добавление будет иметь более высокий приоритет, 4 + 3 будет оцениваться первым, а значение x будет 35 .

<час>

Таблица приоритета операторов

Чем выше приоритет оператора, тем выше он появляется в таблице

<тд>+, - <тд><<,>> <тд>& <тд>^ <тд>| <тд>&& <тд>|| <тд>? :
Приоритет оператора C#
Категория Операторы
Инкремент и декремент Postfix ++, --
Инкремент префикса, декремент и унарный ++, --, +, -, !, ~
Мультипликативный *, /, %
Добавка
Сдвиг
Относительный <, <=,>,>=
Равенство ==, !=
Побитовое И
Побитовое исключающее ИЛИ
Побитовое ИЛИ
Логическое И
Логическое ИЛИ
Троичный
Назначение =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=,>>=

Операторы присваивания имеют самый низкий приоритет, а постфиксные операторы инкремента и декремента имеют наивысший приоритет.

<час>

Пример 1. Приоритет оператора

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);
		}
	}
}

Когда мы запустим программу, вывод будет таким:

19
False

Давайте разберемся, как выражение вычисляется в программе.

Приоритет -- и ++ выше, чем * и приоритет * выше, чем - . Отсюда утверждение,

result1 = --a * b - ++c;

эквивалентно

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

Выражение внутри круглых скобок всегда вычисляется первым, независимо от приоритета операторов за его пределами.

В следующем выражении приоритет + выше, чем >= . Итак, с и а сначала добавляется и сумма сравнивается с b для создания false .

<час>

Ассоциативность операторов в C#

В предыдущем разделе мы обсуждали приоритет операторов. Если используются два оператора с разным приоритетом, первым оценивается оператор с более высоким приоритетом.

Но что, если оба оператора имеют одинаковый приоритет?

В таком случае выражение оценивается на основе ассоциативности оператора (слева направо или справа налево).

Например:

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

Здесь оба * и / имеют одинаковый приоритет. Но поскольку ассоциативность этих операторов — слева направо , a * b сначала оценивается, а затем выполняется деление. Окончательный результат этого выражения будет 10 .

В данном конкретном примере ассоциативность не имеет большого значения. Потому что даже если бы деление было выполнено до умножения, результат не изменился бы.

Давайте рассмотрим другой пример.

int a = 5, b = 6, c = 3;
a = b = c;

Ассоциативность = оператор идет справа налево . Таким образом, значение c (например, 3 ) присваивается b , а затем значение b назначается a . Таким образом, после выполнения этого оператора значения a , б и с будет 3 .

В таблице ниже показана ассоциативность операторов C#:

<тд>+, - <тд><<,>> <тд>& <тд>^ <тд>| <тд>&& <тд>|| <тд>? :
Ассоциативность операторов C#
Категория Операторы Ассоциативность
Инкремент и декремент Postfix ++, -- Слева направо
Инкремент префикса, декремент и унарный ++, --, +, -, !, ~ Справа налево
Мультипликативный *, /, % Слева направо
Добавка Слева направо
Сдвиг Слева направо
Относительный <, <=,>,>= Слева направо
Равенство ==, != Слева направо
Побитовое И Слева направо
Побитовое исключающее ИЛИ Слева направо
Побитовое ИЛИ Слева направо
Логическое И Слева направо
Логическое ИЛИ Слева направо
Троичный Справа налево
Назначение =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=,>>= Справа налево

Почти все операторы имеют ассоциативность слева направо. Операторы, имеющие ассоциативность справа налево:

<час>

Пример 2:Ассоциативность операторов

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);
		}
	}
}

Когда мы запустим программу, вывод будет таким:

10
a = 3, b = 3, c = 3

Язык C

  1. Ключевые слова и идентификаторы C#
  2. Операторы С#
  3. С# тернарный (?:) оператор
  4. Класс и объект С#
  5. Абстрактный класс и метод С#
  6. Частичный класс C# и частичный метод
  7. Запечатанный класс и метод С#
  8. Операторы в C++ с примером:что такое, типы и программы
  9. C — константы и литералы
  10. C - Вход и выход