运算符是表达式很重要的一部分,对表达式中的操作数进行运算。
如+ - * / % 等,根据运算符所需操作数的个数,可把运算符分为以下几类
一元运算符:只带有一个操作数并使用前缀表示法,如:--x或者x++,++,--等运算符。
二元运算符:带有两个操作数并且全部使用中缀表示法,如:x+y, + - * / 等运算符。
三元运算符:带有3个操作数并且使用中缀表示法,如:? : 运算符。 算术表达式是最为常见的一种表达式,由操作数和运算符组成,
而这些运算符之间存在一定的优先级,如*运算符的优先级就大于+
当表达式包括多个运算符时,运算符的优先级控制各个运算符的运算顺序。
对于x+y*z表达式而言,该表达式首先计算y*x表达式的值,然后再计算y*z的结果与x的和。
即该表达式等价于x+(y*z)表达式。
因为* 运算符的优先级大于+ 运算符的优先级。
根据运算符的优先级可以把C#中运算符分为以下14类(从高到低的优先级顺序)
基本:x.y f(x) a[x] x++ x-- new typeof checked unchecked
一元:+ - ! ~ ++x --x (T)x (T)x为类型转换运算
乘除:* / %
加减:+ -
移位:<< >>
关系和类型检测:< > <= >= is as
相等:== !=
逻辑与:&
逻辑异或:^
逻辑或:|
条件与:&&
条件或:||
条件:?:
赋值:= *= /= % = += -= <<= >>= &= ^= |=
当操作数出现的具有相同优先级的两个运算符之间时,
运算符的顺序与运算符本身特性相关。
除了赋值运算符外,所有的二元运算符都是从左向右执行运算。
如"x+y+z"表达式按照(x+y)+z表达式进行计算。
赋值运算和?:条件运算符是从右向左执行运算。
如:x=y=z表达式按照x=(y=z)表达式进行运算
|