English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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 - 条件为真
位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:
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는 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#이 지원하는 다른 중요한 연산자를 나열합니다. sizeof、typeof 및 ? :.
оператор | 설명 | 예제 |
---|---|---|
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
приоритет операторов определяет комбинацию элементов в выражении. Это влияет на то, как вычисляется выражение. Некоторые операторы имеют более высокий приоритет, чем другие, например, операторы умножения и деления имеют более высокий приоритет, чем операторы сложения и вычитания.
например 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