C# Операторы
Оператор — это символ, который указывает компилятору выполнять определенные математические или логические операции. C# имеет богатый набор встроенных операторов, которые классифицируются следующим образом:
- Арифметические операторы
- Операторы отношения
- Логические операторы
- Побитовые операторы
- Операторы присваивания
- Другие операторы
В этом руководстве будут последовательно объяснены арифметические операторы, операторы отношения, логические операторы, побитовые операторы, операторы присваивания и другие операторы.
Арифметические операторы
В следующей таблице показаны все арифметические операторы, поддерживаемые C#. Предположим, переменнаяAимеет значение 10, переменнаяBимеет значение 20, тогда:
| Операторы | Описание | Пример |
|---|---|---|
| + | Складывает два операнда. | A + B даст в результате 30 |
| - | Вычитает второй операнд из первого операнда. | A - B даст в результате -10 |
| * | Умножает два операнда. | A * B даст в результате 200 |
| / | Числитель, делённый на знаменатель | B / A даст в результате 2 |
| % | Оператор остатка, остаток после целочисленного деления. | B % A даст в результате 0 |
| ++ | Оператор инкремента, увеличивает целочисленное значение на 1. | A++ даст в результате 11 |
| -- | Оператор декремента, уменьшает целочисленное значение на 1. | A-- даст в результате 9 |
Пример
См. пример ниже, чтобы понять все арифметические операторы, доступные в C#:
Пример
namespace OperatorsAppl
{
class Program
{
static void Main(string[] args)
{
int a = 21;
int b = 10;
int c;
c = a + b;
Console.WriteLine("Строка 1 - значение c равно {0}", c);
c = a - b;
Console.WriteLine("Строка 2 - значение c равно {0}", c);
c = a * b;
Console.WriteLine("Строка 3 - значение c равно {0}", c);
c = a / b;
Console.WriteLine("Строка 4 - значение c равно {0}", c);
c = a % b;
Console.WriteLine("Строка 5 - значение c равно {0}", c);
// ++a выполняет инкремент перед присваиванием
c = ++a;
Console.WriteLine("Строка 6 - значение c равно {0}", c);
// На этом этапе значение a равно 22
// --a выполняет декремент перед присваиванием
c = --a;
Console.WriteLine(Строка 7 - значение c равно {0}, c);
Console.ReadLine();
}
}
}
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Line 1 - c 的值是 31 Line 2 - c 的值是 11 Line 3 - c 的值是 210 Line 4 - c 的值是 2 Line 5 - c 的值是 1 Line 6 - c 的值是 22 Line 7 - c 的值是 21
- c = a++: Сначала присвойте a переменной c, затем инкрементируйте a.
- c = ++a: Сначала инкрементируйте a, затем присвойте a переменной c.
- c = a--: Сначала присвойте a переменной c, затем декрементируйте a.
- c = --a: Сначала декрементируйте a, затем присвойте a переменной c.
Пример
namespace OperatorsAppl
{
class Program
{
static void Main(string[] args)
{
int a = 1;
int b;
// a++ присваивает перед инкрементом
b = a++;
Console.WriteLine("a = {0}", a);
Console.WriteLine("b = {0}", b);
Console.ReadLine();
// ++a выполняет инкремент перед присваиванием
a = 1; // Повторно инициализировать a
b = ++a;
Console.WriteLine("a = {0}", a);
Console.WriteLine("b = {0}", b);
Console.ReadLine();
// a-- присваивает перед декрементом
a = 1; // Повторно инициализировать a
b= a--;
Console.WriteLine("a = {0}", a);
Console.WriteLine("b = {0}", b);
Console.ReadLine();
// --a выполняет декремент перед присваиванием
a = 1; // Повторно инициализировать a
b= --a;
Console.WriteLine("a = {0}", a);
Console.WriteLine("b = {0}", b);
Console.ReadLine();
}
}
}
При выполнении вышеуказанной программы выводится следующий результат:
a = 2 b = 1 a = 2 b = 2 a = 0 b = 1 a = 0 b = 0
Операторы отношения
В следующей таблице показаны все операторы отношения, поддерживаемые C#. Предположим, переменнаяAимеет значение 10, переменнаяBимеет значение 20, тогда:
| Операторы | Описание | Пример |
|---|---|---|
| == | Проверяет, равны ли значения двух операндов; если они равны, условие истинно. | (A == B) не истинно. |
| != | Проверяет, равны ли значения двух операндов; если они не равны, условие истинно. | (A != B) истинно. |
| > | Проверяет, больше ли значение левого операнда, чем значение правого операнда; если да, условие истинно. | (A > B) не истинно. |
| < | Проверяет, меньше ли значение левого операнда, чем значение правого операнда; если да, условие истинно. | (A < B) истинно. |
| >= | Проверяет, является ли значение левого операнда большим или равным значению правого операнда; если да, условие истинно. | (A >= B) не истинно. |
| <= | Проверяет, является ли значение левого операнда меньшим или равным значению правого операнда; если да, условие истинно. | (A <= B) истинно. |
Пример
См. пример ниже, чтобы понять все операторы отношения, доступные в C#:
Пример
class Program
{
static void Main(string[] args)
{
int a = 21;
int b = 10;
if (a == b)
{
Console.WriteLine("Строка 1 - a равно b");
}
else
{
Console.WriteLine("Строка 1 - a не равно b");
}
if (a < b)
{
Console.WriteLine("Строка 2 - a меньше b");
}
else
{
Console.WriteLine("Строка 2 - a не меньше b");
}
if (a > b)
{
Console.WriteLine("Строка 3 - a больше b");
}
else
{
Console.WriteLine("Строка 3 - a не больше b");
}
/* Измените значения a и b */
a = 5;
b = 20;
if (a <= b)
{
Console.WriteLine(Строка 4 - a меньше или равно b);
}
if (b >= a)
{
Console.WriteLine(Строка 5 - b больше или равно a);
}
}
}
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Line 1 - a 不等于 b Line 2 - a 不小于 b Line 3 - a 大于 b Line 4 - a 小于或等于 b Line 5 - b 大于或等于 a
Логические операторы
В следующей таблице показаны все логические операторы, поддерживаемые C#. Предположим, переменнаяAимеет логическое значение true, переменнаяBимеет логическое значение false, тогда:
| Операторы | Описание | Пример |
|---|---|---|
| && | Называется логическим оператором AND. Если оба операнда не равны нулю, условие истинно. | (A && B) ложно. |
| || | Называется логическим оператором OR. Если хотя бы один операнд не равен нулю, условие истинно. | (A || B) истинно. |
| ! | Называется оператором логического НЕ. Он используется для инвертирования логического состояния операнда. Если условие истинно, оператор логического НЕ сделает его ложным. | !(A && B) истинно. |
Пример
См. пример ниже, чтобы понять все логические операторы, доступные в C#:
Пример
namespace OperatorsAppl
{
class Program
{
static void Main(string[] args)
{
bool a = true;
bool b = true;
if (a && b)
{
Console.WriteLine(Строка 1 - условие истинно);
}
if (a || b)
{
Console.WriteLine(Строка 2 - условие истинно);
}
/* Измените значения a и b */
a = false;
b = истина;
if (a && b)
{
Console.WriteLine(Строка 3 - условие истинно);
}
else
{
Console.WriteLine("Строка 3 - условие не истинно");
}
if (!(a && b))
{
Console.WriteLine(Строка 4 - условие истинно);
}
Console.ReadLine();
}
}
}
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Line 1 - 条件为真 Line 2 - 条件为真 Line 3 - 条件不为真 Line 4 - 条件为真
Побитовые операторы
Побитовые операторы воздействуют на биты и выполняют операции побитово. Таблицы истинности для &, | и ^ приведены ниже:
| p | q | p & q | p | q | p ^ q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
Предположим, A = 60 и B = 13. В двоичном формате они выглядят следующим образом:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
В следующей таблице перечислены побитовые операторы, поддерживаемые C#. Предположим, переменнаяAимеет значение 60, переменнаяBимеет значение 13, тогда:
| Операторы | Описание | Пример |
|---|---|---|
| & | Если бит присутствует в обоих операндах, бинарный оператор AND копирует бит в результат. | (A & B) даёт 12, что равно 0000 1100. |
| | | Если бит присутствует хотя бы в одном из операндов, бинарный оператор OR копирует бит в результат. | (A | B) даёт 61, что равно 0011 1101. |
| ^ | Если бит присутствует в одном операнде, но не в обоих, бинарный оператор XOR копирует бит в результат. | (A ^ B) даёт 49, что равно 0011 0001. |
| ~ | Оператор побитового дополнения — это унарный оператор, который выполняет "переворачивание" битов, то есть 0 становится 1, а 1 становится 0, включая знаковый бит. | (~A ) приведёт к -61, что представляет собой 1100 0011, представление в дополнительном коде знакового двоичного числа. |
| << | Оператор сдвига влево. Значение левого операнда сдвигается влево на число битов, заданное правым операндом. | A << 2 даёт 240, что равно 1111 0000. |
| >> | Оператор двоичного сдвига вправо. Значение левого операнда сдвигается вправо на число битов, указанное правым операндом. | A >> 2 даёт 15, что равно 0000 1111. |
Пример
См. пример ниже, чтобы понять все побитовые операторы, доступные в C#:
Пример
namespace OperatorsAppl
{
class Program
{
static void Main(string[] args)
{
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
Console.WriteLine("Строка 1 - значение c равно {0}", c );
c = a | b; /* 61 = 0011 1101 */
Console.WriteLine("Строка 2 - значение c равно {0}", c);
c = a ^ b; /* 49 = 0011 0001 */
Console.WriteLine("Строка 3 - значение c равно {0}", c);
c = ~a; /*-61 = 1100 0011 */
Console.WriteLine("Строка 4 - значение c равно {0}", c);
c = a << 2; /* 240 = 1111 0000 */
Console.WriteLine("Строка 5 - значение c равно {0}", c);
c = a >> 2; /* 15 = 0000 1111 */
Console.WriteLine("Строка 6 - значение c равно {0}", c);
Console.ReadLine();
}
}
}
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Line 1 - c 的值是 12 Line 2 - c 的值是 61 Line 3 - c 的值是 49 Line 4 - c 的值是 -61 Line 5 - c 的值是 240 Line 6 - c 的值是 15
Операторы присваивания
В следующей таблице перечислены операторы присваивания, поддерживаемые в C#:
| Операторы | Описание | Пример |
|---|---|---|
| = | Оператор простого присваивания, присваивает значение правого операнда левому операнду. | C = A + B присвоит значение A + B переменной C |
| += | Оператор сложения с присваиванием присваивает левому операнду результат прибавления правого операнда к левому операнду. | C += A эквивалентно C = C + A. |
| -= | Оператор вычитания с присваиванием присваивает левому операнду результат вычитания правого операнда из левого операнда. | C -= A эквивалентно C = C - A. |
| *= | Оператор умножения с присваиванием присваивает левому операнду результат умножения правого операнда на левый операнд. | C *= A эквивалентно C = C * A. |
| /= | Оператор деления с присваиванием присваивает левому операнду результат деления левого операнда на правый операнд. | C /= A эквивалентно C = C / A. |
| %= | Оператор деления по модулю с присваиванием, вычисляет остаток от деления двух операндов и присваивает его левому операнду. | C %= A эквивалентно C = C % A. |
| <<= | Оператор сдвига влево с присваиванием. | C <<= 2 эквивалентно C = C << 2 |
| >>= | Оператор сдвига вправо с присваиванием. | C >>= 2 эквивалентно C = C >> 2 |
| &= | Оператор побитового И с присваиванием. | C &= 2 эквивалентно C = C & 2 |
| ^= | Оператор побитового исключающего ИЛИ с присваиванием. | C ^= 2 эквивалентно C = C ^ 2 |
| |= | Побитовый оператор ИЛИ с присваиванием. | C |= 2 эквивалентно C = C | 2 |
Пример
См. пример ниже, чтобы понять все операторы присваивания, доступные в C#:
Пример
namespace OperatorsAppl
{
class Program
{
static void Main(string[] args)
{
int a = 21;
int c;
c = a;
Console.WriteLine(Строка 1 - = значение c = {0}, c);
c += a;
Console.WriteLine(Строка 2 - += значение c = {0}, c);
c -= a;
Console.WriteLine("Строка 3 - -= значение c = {0}", c);
c *= a;
Console.WriteLine("Строка 4 - *= значение c = {0}", c);
c /= a;
Console.WriteLine(Строка 5 - /= значение c = {0}, c);
c = 200;
c %= a;
Console.WriteLine(Строка 6 - %= значение c = {0}, c);
c <<= 2;
Console.WriteLine(Строка 7 - <<= значение c = {0}, c);
c >>= 2;
Console.WriteLine(Строка 8 - >>= значение c = {0}, c);
c &= 2;
Console.WriteLine(Строка 9 - &= значение c = {0}, c);
c ^= 2;
Console.WriteLine(Строка 10 - ^= значение c = {0}, c);
c |= 2;
Console.WriteLine(Строка 11 - |= значение c = {0}, c);
Console.ReadLine();
}
}
}
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Line 1 - = c 的值 = 21 Line 2 - += c 的值 = 42 Line 3 - -= c 的值 = 21 Line 4 - *= c 的值 = 441 Line 5 - /= c 的值 = 21 Line 6 - %= c 的值 = 11 Line 7 - <<= c 的值 = 44 Line 8 - >>= c 的值 = 11 Line 9 - &= c 的值 = 2 Line 10 - ^= c 的值 = 0 Line 11 - |= c 的值 = 2
Другие операторы
В следующей таблице перечислены некоторые другие важные операторы, поддерживаемые C#, включаяsizeof、typeofи? :。
| Операторы | Описание | Пример |
|---|---|---|
| sizeof() | Возвращает размер типа данных. | sizeof(int) вернёт 4. |
| typeof() | Возвращает тип класса. | typeof(StreamReader); |
| & | Возвращает адрес переменной. | &a; получит фактический адрес переменной. |
| * | Указатель на переменную. | *a; указывает на переменную. |
| ? : | Условное выражение | Если условие истинно ? то X : иначе Y |
| является | Определяет, относится ли объект к определённому типу. | If( Ford is Car) // Проверяет, является ли Ford объектом класса Car. |
| as | Приведение типов, даже если преобразование не удастся, не вызовет исключения. | Object obj = new StringReader("Hello"); StringReader r = obj as StringReader; |
Пример
Пример
namespace OperatorsAppl
{
class Program
{
static void Main(string[] args)
{
/* Пример оператора sizeof */
Console.WriteLine("Размер int равен {0}", sizeof(int));
Console.WriteLine("Размер short равен {0}", sizeof(short));
Console.WriteLine("Размер double равен {0}", sizeof(double));
/* Пример тернарного оператора */
int a, b;
a = 10;
b = (a == 1) ? 20 : 30;
Console.WriteLine("Значение b равно {0}", b);
b = (a == 10) ? 20 : 30;
Console.WriteLine("Значение b равно {0}", b);
Console.ReadLine();
}
}
}
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
int 的大小是 4 short 的大小是 2 double 的大小是 8 b 的值是 30 b 的值是 20
Ключевое слово typeof используется для получения объекта типа; оно обычно используется для рефлексии и динамического создания экземпляров типов.
Вот простой пример использования typeof:
Пример
class Program
{
static void Main(string[] args)
{
Type type = typeof(string);
Console.WriteLine(type.FullName);
Console.ReadKey();
}
}
В приведённом выше коде мы используем ключевое слово typeof для получения объекта типа string и сохраняем его в переменной type типа Type. Затем мы используем свойство FullName для вывода полного имени этого типа.
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
System.String
Приоритет операторов в C#
Приоритет операторов определяет группировку членов в выражении. Это влияет на то, как вычисляется выражение. Некоторые операторы имеют более высокий приоритет, чем другие. Например, операторы умножения и деления имеют более высокий приоритет, чем операторы сложения и вычитания.
Например, x = 7 + 3 * 2, здесь x присваивается 13, а не 20, потому что оператор * имеет более высокий приоритет, чем +, поэтому умножение 3*2 вычисляется первым, а затем прибавляется 7.
В следующей таблице перечислены операторы по приоритету от высокого к низкому. Операторы с более высоким приоритетом находятся в верхней части таблицы, а операторы с более низким приоритетом — в нижней. В выражении операторы с более высоким приоритетом вычисляются первыми.
Краткий обзор приоритета.: Сначала скобки, затем умножение/деление, затем сложение/вычитание, затем сдвиги, затем отношения, затем логические, затем условные, и наконец, запятая., 。| Категория | Операторы | Ассоциативность |
|---|---|---|
| Постфиксные | () [] -> . ++ - - | Слева направо |
| Унарные | + - ! ~ ++ - - (type)* & sizeof | Справа налево |
| Мультипликативные | * / % | Слева направо |
| Аддитивные | + - | Слева направо |
| Сдвиг | << >> | Слева направо |
| Связь | < <= > >= | Слева направо |
| Равенство | == != | Слева направо |
| Побитовое И | & | Слева направо |
| Побитовое XOR | ^ | Слева направо |
| Побитовое ИЛИ | | | Слева направо |
| Логическое И | && | Слева направо |
| Логическое ИЛИ | || | Слева направо |
| Условия | ?: | Справа налево |
| Присваивание | = += -= *= /= %=>>= <<= &= ^= |= | Справа налево |
| comma | , | Слева направо |
Пример
Пример
namespace OperatorsAppl
{
class Program
{
static void Main(string[] args)
{
int a = 20;
int b = 10;
int c = 15;
int d = 5;
int e;
e = (a + b) * c / d; // ( 30 * 15 ) / 5
Console.WriteLine(Значение (a + b) * c / d равно {0}, e);
e = ((a + b) * c) / d; // (30 * 15 ) / 5
Console.WriteLine("Значение ((a + b) * c) / d равно {0}", e);
e = (a + b) * (c / d); // (30) * (15/5)
Console.WriteLine("Значение (a + b) * (c / d) равно {0}", e);
e = a + (b * c) / d; // 20 + (150/5)
Console.WriteLine(Значение a + (b * c) / d равно {0}, e);
Console.ReadLine();
}
}
}
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
(a + b) * c / d 的值是 90 ((a + b) * c) / d 的值是 90 (a + b) * (c / d) 的值是 90 a + (b * c) / d 的值是 50
Приоритет арифметических операторов и операторов присваивания:
Пример
int result = a + b * c; // Сначала вычисляется умножение, затем сложение
Console.WriteLine(result); // вывод 20
result = (a + b) * c; // Сначала вычислите сложение, затем умножение
Console.WriteLine(result); // вывод 30
a += b * c; // Сначала вычислите умножение, затем выполните присваивание сложения
Console.WriteLine(a); // вывод 20
Приоритет логических операторов:
Пример
bool a = true, b = false, c = true;
bool result = a || b && c; // Сначала вычислите операцию AND, затем операцию OR
Console.WriteLine(result); // Вывод true
result = (a || b) && c; // Сначала вычислите операцию OR, затем операцию AND
Console.WriteLine(result); // Вывод true
result = a || (b && c); // Сначала вычислите операцию AND, затем операцию OR
Console.WriteLine(result); // Вывод true
Приоритет условных операторов:
Пример
string result = a > b ? "a больше b" : "a не больше b"; // Сначала определите соотношение величин, затем выполните условный оператор
Console.WriteLine(result); // Вывод "a больше b"
Примечание:Поскольку круглые скобки могут изменять приоритет операторов, в практических приложениях рекомендуется по возможности использовать круглые скобки, чтобы уточнить порядок операций и повысить читабельность и точность кода.
Другие расширения