2.3 运用运算符
C#语言提供了大量运算符,这些运算符是指定在表达式中执行哪些操作的符号。C#预定义了通常的算术和逻辑运算符,以及在表2-3中显示的各种其他运算符。
表2-3 C#中常用的运算符及其含义
2.3.1 算术运算符
C#中提供的算术运算符有以下5种:
◆+
◆-
◆*
◆/
◆%
1. “+ ”运算符
“+”运算符既可作为一元运算符也可作为二元运算符。一元“+”运算符是为所有数值类型预定义的。对数值类型进行一元“+”运算的结果就是操作数的值。
C#为数值类型和字符串类型预定义了二元“+”运算符。对于数值类型,“+”计算两个操作数之和。当其中的一个操作数是字符串类型或两个操作数都是字符串类型时,“+”将操作数的字符串表示形式串联在一起。
示例如下:
2. “-”运算符
“-”运算符既可作为一元运算符也可作为二元运算符。一元“-”运算符是为所有数值类型预定义的。数值类型的一元“-”运算的结果是操作数的相反数。
二元“-”运算符是为所有数值类型和枚举类型预定义的,其功能是从第一个操作数中减去第二个操作数。示例如下:
3. “*”运算符
乘法运算符“*”,用于计算操作数的积。
4. n“/”运算符
除法运算符“/”,用第二个操作数除第一个操作数。
示例如下:
5. “%”运算符
模数运算符“%”用于计算第二个操作数除第一个操作数后的余数。
例如:5%2=1,-5%2=-1。
2.3.2 赋值运算符
C#中提供了=,+=,-=,/=,%=,&=,|=和^=等赋值运算符。
“=”为简单赋值运算符,用于将右操作数的值存储在左操作数表示的存储位置、属性或索引器中,并将值作为结果返回。示例如下:
+=,-=,/=,%=,*=,&=,|=和^=为复合赋值运算符。
例如:x+=3; 等效于x=x+3;
x%=3; 等效于x=x%3;
x*=3; 等效于x=x*3;
注意
操作数的类型必须相同(或右边的操作数必须可以隐式地转换为左边操作数的类型)。
2.3.3 其他运算符
1. 关系运算符
在C#中可以使用关系运算符来编写比较语句,从而实现“真”、“假”的判断。C#语言提供了多种关系运算符,表2-4给出了C#中使用的关系运算符,操作数可以是变量、常量或表达式。
表2-4 C#中的关系运算符
2. 条件运算符
条件运算符 (?:) 根据布尔型表达式的值返回两个值中的一个。条件运算符的格式如下:
condition ? expression1 : expression2;
如果条件condition为true,则计算表达式expression1并以它的计算结果为准;如果condition为false,则计算表达式expression2并以它的计算结果为准。执行过程中只计算两个表达式中的一个。
注意
条件运算符为右联运算符,因此表达式a ? b : c ? d : e应该按如下规则计算:a ? b : (c ? d : e)。
3. 逻辑运算符
C#中提供了逻辑与(&&)、逻辑或(||)和逻辑非(!)三种逻辑运算符。其中,逻辑与、逻辑或是二元运算符,要求有两个操作数。逻辑非是一元运算符,只有一个操作数。操作数是布尔型的值或表达式。
对于逻辑与(&&),逻辑或(||)运算符,仅在必要时才计算第二个操作数。例如:x && y,如果x为false,则不计算y。因为不论y为何值,“与”操作的结果都为false。而对于x || y,如果x为true,则不计算y。因为不论y为何值,“或”操作的结果都为true。
4. 增量运算符和减量运算符
增量运算符 (++) 将操作数加1,增量运算符可以出现在操作数之前或之后。
例如:i++和++i。
第一种形式是前缀增量操作,该操作的结果是操作数加1之后的值;第二种形式是后缀增量操作,该运算的结果是操作数加1之前的值。
减量运算符 (--) 将操作数减1,减量运算符也可以出现在操作数之前或之后。
例如:--i和i--。
第一种形式是前缀减量操作,该运算的结果是操作数减小之后的值;第二种形式是后缀减量操作,该运算的结果是操作数减小之前的值。
2.3.4 运算符的优先级
当计算含有两个或两个以上运算符的复杂表达式时,就需要考虑运算符的优先级。运算符的优先级用于确定哪些操作应先执行,从而可以计算出复杂表达式的结果。
同时,当一个表达式中出现同一优先级的多个运算符时,则这些运算符的运算顺序由其结合性决定。表2-5给出了C#中常用运算符的优先级和结合性。
表2-5 C#中常用运算符的优先级和结合性