C# 运算符

由 小路依依 创建, 最后一次修改 2016-08-12

运算符

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

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 其它运算符

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

算术运算符

下表列出了 C# 支持的所有算术运算符。假设变量 A 的值为10,变量 B 的值为20,则:

算术运算符实例

运算符描述实例
+两个操作数相加A + B = 30
-两个操作数相减(第一个减去第二个)A - B = -10
*两个操作数相乘A * B = 200
/分子除以分母B / A = 2
%取模运算符,整除后的余数B % A = 0
++自增运算符,整数值增加1A++ = 11
--自减运算符,整数值减少1A-- = 9

关系运算符

下表列出了 C# 支持的所有关系运算符。假设变量 A 的值为10,变量 B 的值为 20,则:

关系运算符实例

运算符描述实例
==检查两个操作数的值是否相等,如果相等则条件为真(A == B) 不为真
!=检查两个操作数的值是否相等,如果不相等则条件为真(A != B) 为真
>检查左边的操作数的值是否大于右操作数的值,如果是则条件为真(A > B) 不为真
<检查左边的操作数的值是否小于右操作数的值,如果是则条件为真(A < B) 为真
>=检查左边的操作数的值是否大于或等于右操作数的值,如果是则条件为真(A >= B) 不为真
<=检查左边的操作数的值是否小于或等于右操作数的值,如果是则条件为真(A <= B) 为真

逻辑运算符

下表列出了 C# 所支持的所有逻辑运算符。假设变量 A 为布尔值 true,变量 B 为布尔值 false,则:

逻辑运算符实例

运算符描述实例
&&称为逻辑与操作,如果两个操作数都非零,则条件为真(A && B) 结果为 false
||称为逻辑或操作,如果两个操作数中有任意一个非零,则条件为真(A || B) 结果为 true
!称为逻辑非运算符,用来逆转操作数的逻辑状态。如果条件为真则逻非运算符将使其为假

位运算符

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

ppp & 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 的值为60,变量 B 的值为13 则:

位运算符示例

运算符描述实例
&如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。(A & B) 将得到 12. 即 0000 1100
|如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。(A | B) 将得到 61, 即 0011 1101
^如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。(A ^ B) 将得到 49, 即 0011 0001
~二进制补码运算符是一元运算符,具有“翻转”的位效果。(~A ) 将得到 -61, 即 1100 0011
<<二进制左移运算符。左操作数的值向左移动右操作数指定的位数。A << 2 将得到 240, 即 1111 0000
>>二进制右移运算符。左操作数的值由右移动右操作数指定的位数。A >> 2 将得到 15, 即 0000 1111

赋值运算符

下表列出了 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# 支持的其他一些重要的运算符,包括 sizeoftypeof 运算和? :

其它运算符实例

运算符描述示例
sizeof()返回一个数据类型的大小sizeof(int),将返回 4
typeof()返回一个类的类型typeof(StreamReader)
&返回一个变量的地址&a; 将给出变量的实际地址
*指针的变量*a; 将指向一个变量
? :条件表达式如果条件为真,那么 ? 值为 X : 否则 ? 值为 Y
is判断一个对象是否是特定的类型If( Ford is Car) // 判断 Ford 对象是否属于 Car 类型
as转换,如果转换失败则引发异常Object obj = new StringReader("Hello");StringReader r = obj as StringReader;

C# 运算符优先级

运算符优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符比加减运算符的优先级高:

例如 X = 7 + 3 2;这里,x 被赋值为 13,而不是 20,因为运算符 的优先级高于 +,所以这里首先进行 3*2 运算,然后再加上 7。

下表按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格上面,具有较低优先级的运算符出现在表格下面。在表达式中,较高优先级的运算符会优先被运算。

运算符优先级实例

分类运算符结合性
后缀() [] -> . ++ - -从左到右
一元+ - ! ~ ++ - - (type)* & sizeof从右到左
乘法* / %从左到右
相加+ -从左到右
移位<< >>从左到右
关系< <= > >=从左到右
相等== !=从左到右
按位与&从左到右
按位异或| ^从左到右
按位或|从左到右
逻辑 AND&&从左到右
逻辑 OR||从左到右
条件?:从右到左
赋值= += -= *= /= %=>>= <<= &= ^= |=从右到左
逗号从左到右
以上内容是否对您有帮助:

二维码
建议反馈
二维码