English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# 연산자

C#中的运算符是对操作数执行某些操作的一些特殊符号。在数学中,加号(+)是左右数之和。同样地,C#包括不同类型操作的各种运算符。

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C# 有丰富的内置运算符,分类如下:

  • 算术运算符

  • 관계 연산자

  • 논리 연산자

  • 位运算符

  • 할당 연산자

  • 기타 연산자

本教程将逐一讲解算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符及其他运算符。

算术运算符

下表显示了 C# 支持的所有算术运算符。假设变量 = A는 C = C와 동일합니다 的值为 10, 변수 B 的值为 20이면:

оператор설명예제
+把两个操作数相加= A는 C = C와 동일합니다 + B 将得到 30
-从第一个操作数中减去第二个操作数= A는 C = C와 동일합니다 - B 将得到 -10
*把两个操作数相乘= A는 C = C와 동일합니다 * B 将得到 200
/分子除以分母B / A 将得到 2
%取模运算符,整除后的余数B % A 将得到 0
++自增运算符,整数值增加 1= A는 C = C와 동일합니다++ 将得到 11
--自减运算符,整数值减少 1= A는 C = C와 동일합니다-- 将得到 9

온라인 예제

请看下面的示例,了解 C# 中所有可用的算术运算符:

using System;
namespace OperatorsAppl
{
    class Program
    {
        static void Main(string[] args)
        {
            int a =; 21;
            int b =; 10;
            다음 예제를 참고하여 C#에서 사용할 수 있는 모든 대입 연산자를 이해해보세요:
            c = a + b;
            Console.WriteLine("Line 1 - c의 값은 {0}
            c = a - b;
            Console.WriteLine("Line 2 - c의 값은 {0}
            c = a * b;
            Console.WriteLine("Line 3 - c의 값은 {0}
            c = a / b;
            Console.WriteLine("Line 4 - c의 값은 {0}
            c = a % b;
            Console.WriteLine("Line 5 - c의 값은 {0}
            // ++a 先进行自增运算再赋值
            =  c 의 값 = {0} ++a;
            Console.WriteLine("Line 6 - c의 값은 {0}
            // 此时 a 的值为 22
            // --a 先进行自减运算再赋值
            =  c 의 값 = {0} --a;
            Console.WriteLine("Line 7 - c의 값은 {0}
            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 。

using System;
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는 C = C와 동일합니다 的值为 10, 변수 B 的值为 20이면:

оператор설명예제
==두 연산자의 값이 같으면 조건이 참입니다.(A == B)는 참이 아닙니다.
!=두 연산자의 값이 같지 않으면 조건이 참입니다.(A != B)는 참입니다.
>좌 연산자의 값이 우 연산자의 값보다 크면 조건이 참입니다.(A > B)는 참이 아닙니다.
<좌 연산자의 값이 우 연산자의 값보다 작으면 조건이 참입니다.(A < B)는 참입니다.
>=좌 연산자의 값이 우 연산자의 값보다 크거나 같으면 조건이 참입니다.(A >= B)는 참이 아닙니다.
<=좌 연산자의 값이 우 연산자의 값보다 작거나 같으면 조건이 참입니다.(A <= B)는 참입니다.

온라인 예제

아래 예제를 통해 C#에서 사용할 수 있는 모든 관계 연산자를 이해해보세요:

온라인 예제

using System;
class Program
{
  static void Main(string[] args)
  {
      int a =; 21;
      int b =; 10;
      
      if (a == b)
      {
          Console.WriteLine("Line 1 - a가 b와 같다;
      }
      else
      {
          Console.WriteLine("Line 1 - a가 b와 다르다;
      }
      if (a < b)
      {
          Console.WriteLine("Line 2 - a가 b보다 작다;
      }
      else
      {
          Console.WriteLine("Line 2 - a가 b보다 작지 않다;
      }
      if (a > b)
      {
          Console.WriteLine("Line 3 - a가 b보다 크다;
      }
      else
      {
          Console.WriteLine("Line 3 - a가 b보다 작지 않다;
      }
      /* a와 b의 값을 변경합니다 */
      a = 5;
      b = 20;
      if (a <= b)
      {
         Console.WriteLine("Line 4 - a가 b보다 작거나 같다;
      }
      if (b >= a)
      {
         Console.WriteLine("Line 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는 C = C와 동일합니다 부울 값이 true인 변수 B 부울 값이 false이면:

оператор설명예제
&&논리 그리고 연산자로 불립니다. 두 연산자 모두 0이 아니면 조건이 참입니다.(A && B)는 거짓입니다.
||논리 이거나 연산자로 불립니다. 두 연산자 중 하나가 0이 아니면 조건이 참입니다.(A || B)는 참입니다.
!논리 비 연산자로 불립니다. 연산자의 논리 상태를 반전합니다. 조건이 참이면 논리 비 연산자는 거짓으로 만듭니다.(A && B)는 참입니다.

온라인 예제

아래 예제를 통해 C#에서 사용할 수 있는 모든 논리 연산자를 이해해보세요:

using System;
namespace OperatorsAppl
{
    class Program
    {
        static void Main(string[] args)
        {
            bool a = true;
            bool b = true;
           
            if (a && b)
            {
               Console.WriteLine("Line 1 - 条件为真
            }
            if (a || b)
            {
                Console.WriteLine("Line 2 - 条件为真
            }
            /* a와 b의 값을 변경합니다 */
            a = false;
            b = true;
            if (a && b)
            {
                Console.WriteLine("Line 3 - 条件为真
            }
            else
            {
                Console.WriteLine("Line 3 - 조건이 참이 아닌 경우;
            }
            if (!(a && b))
            {
                Console.WriteLine("Line 4 - 条件为真
            }
            Console.ReadLine();
        }
    }
}

위의 코드가 컴파일되고 실행될 때, 다음과 같은 결과가 생성됩니다:

Line 1 - 条件为真
Line 2 - 条件为真
Line 3 - 条件不为真
Line 4 - 条件为真

位运算符

位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:

pqp & qp | qp ^ q
00000
01011
11110
10011

假设如果 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는 C = C와 동일합니다 的值为 60,变量 B 的值为 13,则:

оператор설명예제
&如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。(A & B) 将得到 12即为 0000 1100
|如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。(A | B) 将得到 61,即为 0011 1101
^如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。(A ^ B) 将得到 49,即为 0011 0001
~按位取反运算符是一元运算符,具有"翻转"位效果,即0变成1,1变成0,包括符号位。(~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。
<<二进制左移运算符。左操作数的值向左移动右操作数指定的位数。A << 2 将得到 240,即为 1111 0000
>>二进制右移运算符。左操作数的值向右移动右操作数指定的位数。A >> 2 将得到 15即为 0000 1111

온라인 예제

아래 예제를 통해 C#에서 사용할 수 있는 모든 비트 연산자를 이해해보세요:

using System;
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("Line 1 - c의 값은 {0}
             c = a | b;           /* 61 = 0011 1101 */
             Console.WriteLine("Line 2 - c의 값은 {0}
             c = a ^ b;           /* 49 = 0011 0001 */
             Console.WriteLine("Line 3 - c의 값은 {0}
             c = ~a;               /*-61 = 1100 0011 */
             Console.WriteLine("Line 4 - c의 값은 {0}
             c = a << 2;     /* 240 = 1111 0000 */
             Console.WriteLine("Line 5 - c의 값은 {0}
             c = a >> 2;     /* 15 = 0000 1111 */
             Console.WriteLine("Line 6 - c의 값은 {0}
            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와 동일합니다
-=좌변 연산자에서 우변 연산자를 뺄 결과를 좌변 연산자에 할당합니다 -C - = A는 C = C와 동일합니다
*=우변 연산자를 좌변 연산자로 곱한 결과를 좌변 연산자에 할당합니다 *C * = A는 C = C와 동일합니다
/=좌변 연산자를 우변 연산자로 나눈 결과를 좌변 연산자에 할당합니다 /C / = A는 C = C와 동일합니다
A%=모듈러 대입 연산자, 두 연산자의 나머지를 왼쪽 연산자에 대입합니다
C %= A는 C = C % A와 동일합니다<<=좌측 이동 또는 대입 연산자 2 C <<= 2
C = C <<>>=우측 이동 또는 대입 연산자 2 C >>= 2
C = C >>&=비트wise AND 또는 대입 연산자 2 C &= 2
C = C &^=비트wise XOR 또는 대입 연산자 2 C ^= 2
C = C ^|=비트wise 이진 또는 대입 연산자 2 C |= 2

온라인 예제

C = C |

using System;
namespace OperatorsAppl
{
    class Program
    {
        static void Main(string[] args)
        {
            int a =; 21;
            다음 예제를 참고하여 C#에서 사용할 수 있는 모든 대입 연산자를 이해해보세요:
            int c;
            Console.WriteLine("Line 1 - = a;
            c += c 의 값 = {0}
            Console.WriteLine("Line 2 - +c = a;
            c -= c 의 값 = {0}
            Console.WriteLine("Line 3 - -= a;
            c *= c 의 값 = {0}
            Console.WriteLine("Line 4 - *= a;
            c /= c 의 값 = {0}
            Console.WriteLine("Line 5 - /= a;
            =  c 의 값 = {0} 2c =
            00;
            Console.WriteLine("Line 6 - c %=
            %=  c 의 값 = {0} 2;
            Console.WriteLine("Line 7 - c <<=
            <<=  c 의 값 = {0} 2;
            Console.WriteLine("Line 8 - c >>=
            >>=  c 의 값 = {0} 2;
            Console.WriteLine("Line 9 - c &=
            &=  c 의 값 = {0} 2;
            Console.WriteLine("Line 10 - c ^=
            ^=  c 의 값 = {0} 2;
            Console.WriteLine("Line 11 - |=  c 의 값 = {0}
            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#이 지원하는 다른 중요한 연산자를 나열합니다. sizeoftypeof? :.

оператор설명예제
sizeof()데이터 타입의 크기를 반환합니다.sizeof(int), 반환됩니다 4.
typeof()class의 타입을 반환합니다.typeof(StreamReader);
&변수의 주소를 반환합니다.&a; 변수의 실제 주소를 얻습니다.
*변수의 포인터*a; 변수로 가리킵니다.
? :조건 표현식조건이 참이면 X가 아니면 Y
is객체가 특정 타입인지�断정합니다.If( Ford is Car)  // Ford가 Car 클래스의 객체인지 확인합니다.
as강제 변환, 변환 실패로 인해 예외가 발생하지 않습니다.Object obj = new StringReader("Hello");
   StringReader r = obj as StringReader;

온라인 예제

using System;
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("worth b = {0}", b);
         b = (a == 10) ? 20 : 30;
         Console.WriteLine("worth b = {0}", b);
         Console.ReadLine();
      }
   }
}

위의 코드가 컴파일되고 실행될 때, 다음과 같은 결과가 생성됩니다:

размер int 4
размер short 2
размер double 8
worth b 30
worth b 20

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

приоритет операторов определяет комбинацию элементов в выражении. Это влияет на то, как вычисляется выражение. Некоторые операторы имеют более высокий приоритет, чем другие, например, операторы умножения и деления имеют более высокий приоритет, чем операторы сложения и вычитания.

например x = 7 + 3 * 2здесь, x присваивается значение 13, а не 20, потому что оператор * имеет + выше приоритета, поэтому сначала вычисляется умножение 3*2затем добавьте 7.

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

категория оператор ассоциативность 
постфикс () [] -> .  ++   - -  왼쪽에서 오른쪽으로 
односторонний +  -   ! ~  ++  - -   (тип)*  & sizeof 오른쪽에서 왼쪽으로 
умножение деление *  /  % 왼쪽에서 오른쪽으로 
加减 +  - 왼쪽에서 오른쪽으로 
сдвиг << >> 왼쪽에서 오른쪽으로 
отношение < <= > >= 왼쪽에서 오른쪽으로 
равенство == != 왼쪽에서 오른쪽으로 
비트 AND & 왼쪽에서 오른쪽으로 
비트 XOR ^ 왼쪽에서 오른쪽으로 
비트 OR | 왼쪽에서 오른쪽으로 
논리적 AND && 왼쪽에서 오른쪽으로 
논리적 OR || 왼쪽에서 오른쪽으로 
조건 ?: 오른쪽에서 왼쪽으로 
할당 =  +=  -=  *=  /= %=>>= <<= &= ^= |= 오른쪽에서 왼쪽으로 
쉼표 , 왼쪽에서 오른쪽으로 

온라인 예제

using System;
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 = ((a + b) * c) / d;   // (30 * 15 ) / 5
         Console.WriteLine("((a + b) * c) / d의 값은 {0}
         e = (a + b) * (c / d);   // (30) * (15/5)
         Console.WriteLine("(a + b) * (c / d)의 값은 {0}
         e = a + (b * c) / d;    //  20 + (150/5)
         Console.WriteLine("a + (b * c) / d의 값은 {0}
         Console.ReadLine();
      }
   }
}

위의 코드가 컴파일되고 실행될 때, 다음과 같은 결과가 생성됩니다:

(a + b) * c / d의 값은 90
((a + b) * c) / d의 값은 90
(a + b) * (c / d)의 값은 90
a + (b * c) / d의 값은 50