- Операторы в C#
- Простой оператор присваивания
- Пример 1. Используем простой оператор присваивания
- Арифметические операторы
- Пример 2. Используем арифметические операторы
- Операторы сравнения
- Пример 3. Используем операторы сравнения
- Логические операторы
- Логические операторы — AND, OR, NOT, XOR
- Оператор логического отрицания !
- Оператор логического И &
- Оператор логического исключения ИЛИ ^
- Оператор логического ИЛИ |
- Условный оператор логического И &&
- Условный оператор логического ИЛИ ||
- Операторы, допускающие логическое значение NULL
- Составное присваивание
- Приоритет операторов
- Возможность перегрузки оператора
- Спецификация языка C#
- См. также
Операторы в C#
Операторы — это символы, которые используются для выполнения операций с операндами. Операндами могут быть переменные и/или константы.
Например, в выражении 2 + 3 , + — это оператор, который используется для выполнения операции сложения, а 2 и 3 — операнды.
Операторы используются для управления переменными и их значениями в программе. C# поддерживает ряд операторов, разделенных по типам выполняемых ими операций.
Простой оператор присваивания
Основной оператор присваивания = используется для присвоения значений переменным.
Здесь переменной x присваивается значение 50.05.
Пример 1. Используем простой оператор присваивания
using System; namespace Operator < class AssignmentOperator < public static void Main(string[] args) < int firstNumber, secondNumber; // Присваиваем переменной значение константы firstNumber = 10; Console.WriteLine("Значение firstNumber = ", firstNumber); // Присваиваем переменной значение другой переменной secondNumber = firstNumber; Console.WriteLine("Значение secondNumber = ", secondNumber); > > >
Значение firstNumber = 10
Значение secondNumber = 10
Вы могли заметить в примере фигурные скобки <> . Такой метод называется форматированием строк, о нем мы поговорим в другой статье. Сейчас вам достаточно знать, что заменяется на firstNumber , следующей за строкой, а заменяется на secondNumber .
Арифметические операторы
Арифметические операторы используются для выполнения арифметических операций: сложение, вычитание, умножение, деление и т. д.
int x = 5; int y = 10; int z = x + y; // z = 15
Название оператора
Пример 2. Используем арифметические операторы
using System; namespace Operator < class ArithmeticOperator < public static void Main(string[] args) < double firstNumber = 14.40, secondNumber = 4.60, result; int num1 = 26, num2 = 4, rem; // Оператор сложения result = firstNumber + secondNumber; Console.WriteLine("+ = ", firstNumber, secondNumber, result); // Оператор вычитания result = firstNumber - secondNumber; Console.WriteLine(" - = ", firstNumber, secondNumber, result) // Оператор умножения result = firstNumber * secondNumber; Console.WriteLine(" * = ", firstNumber, secondNumber, result); // Оператор деления result = firstNumber / secondNumber; Console.WriteLine(" / = ", firstNumber, secondNumber, result); // Оператор взятия остатка rem = num1 % num2; Console.WriteLine(" % = ", num1, num2, rem); > > >
14.4 + 4.6 = 19
14.4 - 4.6 = 9.8
14.4 * 4.6 = 66.24
14.4 / 4.6 = 3.1304347826087
26 % 4 = 2
Операторы сравнения
Операторы сравнения (они же — операторы отношения) используются для проверки связи между двумя операндами. Если сравнение истинно, результат будет true , иначе — false . Операторы отношения обычно используются в условиях и циклах.
Название оператора
Пример 3. Используем операторы сравнения
using System; namespace Operator < class RelationalOperator < public static void Main(string[] args) < bool result; int firstNumber = 10, secondNumber = 20; result = (firstNumber==secondNumber); Console.WriteLine("== возвращает ",firstNumber, secondNumber, result); result = (firstNumber > secondNumber); Console.WriteLine(" > возвращает ",firstNumber, secondNumber, result); result = (firstNumber < secondNumber); Console.WriteLine(" < возвращает ",firstNumber, secondNumber, result); result = (firstNumber >= secondNumber); Console.WriteLine(" >= возвращает ",firstNumber, secondNumber, result); result = (firstNumber <= secondNumber); Console.WriteLine(" <= возвращает ",firstNumber, secondNumber, result); result = (firstNumber != secondNumber); Console.WriteLine(" != возвращает ",firstNumber, secondNumber, result); > > >
10 == 20 возвращает False
10 > 20 возвращает False
10 < 20 возвращает True
10 >= 20 возвращает False
10 10 != 20 возвращает True
Логические операторы
Логические операторы используются для выполнения таких логических операций, как AND (ИЛИ), OR (И) и т. д. Логические операторы работают с булевыми выражениями и возвращают булевые значения true и false . Логические операторы нужны для принятия решений и в циклах.
Логические операторы — AND, OR, NOT, XOR
Логические логические операторы выполняют логические операции с логическими операндами. Операторы включают унарное логическое отрицание ( ! ), двоичное логическое И ( & ), ИЛИ () и | исключающее ИЛИ ( ^ ), а также двоичное условное логическое И ( && ) и ИЛИ ( || ).
- Унарный ! (логическое отрицание) оператор.
- Бинарные & (логическое И), | (логическое ИЛИ), а также ^ (логическое исключающее ИЛИ) операторы. Эти операторы всегда обрабатывают оба операнда.
- Бинарные && (условное логическое И) и || (условное логическое ИЛИ) операторы. Эти операторы вычисляют правый операнд, только если это необходимо.
Для операндов целочисленных типов операторы & , | и ^ выполняют побитовые логические операции. Дополнительные сведения см. в разделе Побитовые операторы и операторы сдвига.
Оператор логического отрицания !
Унарный префиксный оператор ! выполняет логическое отрицание операнда, возвращая true , если операнд имеет значение false , и false , если операнд имеет значение true .
bool passed = false; Console.WriteLine(!passed); // output: True Console.WriteLine(!true); // output: False
Оператор логического И &
Оператор & вычисляет логическое И для всех своих операндов. Результат операции x & y принимает значение true , если оба оператора x и y имеют значение true . В противном случае результат будет false .
Оператор & вычисляет оба операнда, даже если левый операнд имеет значение false . При этом операция должна вернуть значение false , независимо от значения правого операнда.
В следующем примере правый операнд оператора & является вызовом метода, который выполняется независимо от значения левого операнда:
bool SecondOperand() < Console.WriteLine("Second operand is evaluated."); return true; >bool a = false & SecondOperand(); Console.WriteLine(a); // Output: // Second operand is evaluated. // False bool b = true & SecondOperand(); Console.WriteLine(b); // Output: // Second operand is evaluated. // True
Условный логический оператор && AND также вычисляет логическое И своих операндов, но не вычисляет правый операнд, если левый операнд имеет значение false .
Для операндов целочисленных типов оператор & вычисляет побитовое логическое И своих операндов. Унарный оператор & является оператором AddressOf.
Оператор логического исключения ИЛИ ^
Оператор ^ вычисляет логическое исключение ИЛИ для всех своих операндов, возвращая true для x ^ y , если x имеет значение true и y имеет значение false или x имеет значение false и y имеет значение true . В противном случае результат будет false . То есть для bool операндов оператор вычисляет тот же результат, ^ что и оператор != неравенства.
Console.WriteLine(true ^ true); // output: False Console.WriteLine(true ^ false); // output: True Console.WriteLine(false ^ true); // output: True Console.WriteLine(false ^ false); // output: False
Для операндов целочисленных типов оператор ^ вычисляет побитовое исключающее ИЛИ своих операндов.
Оператор логического ИЛИ |
Оператор | вычисляет логическое ИЛИ для всех своих операндов. Результат операции x | y принимает значение true , если хотя бы один из операторов x или y имеет значение true . В противном случае результат будет false .
Оператор | вычисляет оба операнда, даже если левый операнд имеет значение true . При этом операция должна вернуть значение true , независимо от значения правого операнда.
В следующем примере правый операнд оператора | является вызовом метода, который выполняется независимо от значения левого операнда:
bool SecondOperand() < Console.WriteLine("Second operand is evaluated."); return true; >bool a = true | SecondOperand(); Console.WriteLine(a); // Output: // Second operand is evaluated. // True bool b = false | SecondOperand(); Console.WriteLine(b); // Output: // Second operand is evaluated. // True
Условный логический оператор || OR также вычисляет логическое ИЛИ своих операндов, но не вычисляет правый операнд, если левый операнд имеет значение true .
Для операндов целочисленных типов оператор | вычисляет побитовое логическое ИЛИ своих операндов.
Условный оператор логического И &&
Условный оператор логического И && (оператор короткого замыкания) вычисляет логическое И для своих операндов. Результат операции x && y принимает значение true , если оба оператора x и y имеют значение true . В противном случае результат будет false . Если x имеет значение false , y не вычисляется.
В следующем примере правый операнд оператора && является вызовом метода, который не выполняется, если левый операнд имеет значение false :
bool SecondOperand() < Console.WriteLine("Second operand is evaluated."); return true; >bool a = false && SecondOperand(); Console.WriteLine(a); // Output: // False bool b = true && SecondOperand(); Console.WriteLine(b); // Output: // Second operand is evaluated. // True
Оператор & логического И также вычисляет логические И своих операндов, но всегда вычисляет оба операнда.
Условный оператор логического ИЛИ ||
Условный оператор логического ИЛИ || (оператор короткого замыкания) вычисляет логическое ИЛИ для своих операндов. Результат операции x || y принимает значение true , если хотя бы один из операторов x или y имеет значение true . В противном случае результат будет false . Если x имеет значение true , y не вычисляется.
В следующем примере правый операнд оператора || является вызовом метода, который не выполняется, если левый операнд имеет значение true :
bool SecondOperand() < Console.WriteLine("Second operand is evaluated."); return true; >bool a = true || SecondOperand(); Console.WriteLine(a); // Output: // True bool b = false || SecondOperand(); Console.WriteLine(b); // Output: // Second operand is evaluated. // True
Оператор | логического ИЛИ также вычисляет логические ИЛИ своих операндов, но всегда вычисляет оба операнда.
Операторы, допускающие логическое значение NULL
Для операндов bool? операторы & (логическое И) и | (логическое ИЛИ) поддерживают следующую логику с тремя значениями:
- Оператор & возвращает true только в том случае, если оба операнда имеют значение true . Если x или y имеет значение false , оператор x & y возвращает false (даже если другой операнд имеет значение null ). В противном случае выражение x & y будет иметь значение null .
- Оператор | возвращает false только в том случае, если оба операнда имеют значение false . Если x или y имеет значение true , оператор x | y возвращает true (даже если другой операнд имеет значение null ). В противном случае выражение x | y будет иметь значение null .
Эта семантика описывается в следующей таблице:
x | y | x&y | x|y |
---|---|---|---|
Да | true | true | true |
true | false | false | true |
true | null | null | true |
false | true | false | true |
false | false | false | false |
false | null | false | null |
null | true | null | true |
null | false | false | null |
null | null | null | null |
Поведение этих операторов отличается от типичного поведения операторов, допускающих значение NULL. Как правило, оператор, определенный для операндов типа значения, можно также использовать с операндами соответствующего типа значения, допускающего значение NULL. Такой оператор возвращает null , если какой-либо из операндов имеет значение null . При этом операторы & и | могут возвращать отличное от NULL значение, даже если один из операндов имеет значение null . См. подробнее о поведении операторов, допускающих значение NULL, в разделе Операторы с нулификацией в статье Типы, допускающие значение NULL.
Вы также можете также использовать операторы ! и ^ с операндами bool? , как показано в следующем примере:
bool? test = null; Display(!test); // output: null Display(test ^ false); // output: null Display(test ^ null); // output: null Display(true ^ null); // output: null void Display(bool? b) => Console.WriteLine(b is null ? "null" : b.Value.ToString());
Условные логические операторы && и || не поддерживают операнды типа bool? .
Составное присваивание
Для бинарного оператора op выражение составного присваивания в форме
за исключением того, что x вычисляется только один раз.
Операторы & , | и ^ поддерживают составное присваивание, как показано в следующем примере:
bool test = true; test &= false; Console.WriteLine(test); // output: False test |= true; Console.WriteLine(test); // output: True test ^= false; Console.WriteLine(test); // output: True
Условные логические операторы && и || не поддерживают составное присваивание.
Приоритет операторов
В следующем списке перечислены логические операторы в порядке убывания приоритета:
- Оператор логического отрицания !
- Оператор логического И &
- Оператор логического исключающего ИЛИ ^
- Оператор логического ИЛИ |
- Условный оператор логического И &&
- Условный оператор логического ИЛИ ||
Порядок вычисления, определяемый приоритетом операторов, можно изменить с помощью скобок ( () ).
Console.WriteLine(true | true & false); // output: True Console.WriteLine((true | true) & false); // output: False bool Operand(string name, bool value) < Console.WriteLine($"Operand is evaluated."); return value; > var byDefaultPrecedence = Operand("A", true) || Operand("B", true) && Operand("C", false); Console.WriteLine(byDefaultPrecedence); // Output: // Operand A is evaluated. // True var changedOrder = (Operand("A", true) || Operand("B", true)) && Operand("C", false); Console.WriteLine(changedOrder); // Output: // Operand A is evaluated. // Operand C is evaluated. // False
Полный список операторов C#, упорядоченный по уровню приоритета, можно найти в разделе Приоритет операторов статьи Операторы C#.
Возможность перегрузки оператора
Определяемый пользователем тип может перегружать операторы ! , & , | и ^ . При перегрузке бинарного оператора соответствующий оператор составного присваивания также неявно перегружается. Явная перегрузка составного оператора присваивания для пользовательского типа невозможна.
Определяемый пользователем тип не может перегружать условные логические операторы && и || . При этом, если определяемый пользователем тип каким-либо образом перегружает операторы true и false и операторы & и | , операция && или || может быть применена для операндов этого типа. Дополнительные сведения см. в разделе Пользовательские условные логические операторы в Спецификации языка C#.
Спецификация языка C#
Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#: