ASP.NET4.0 运算符
运算符是处理和操作数据的一种符号单元,其作用是标识出数据与数据之间的运算关系,从而帮助程序来操作这些数据的运算过程。因此,运算符又被称作操作符。C#支持6种类型的运算符,即算术运算符、赋值运算符、关系运算符、逻辑运算符、按位运算符和特殊运算符等。
1.算术运算符
算术运算符的作用是对整数型或实数型变量进行各种基本的数学运算,在C#中,算术运算符主要包括7种,如表2-5所示。
表2-5 算术运算符
运算符 | 作用 | 表达式示例 |
+ | 加法运算符,求两数之和 | a+b,1+3 |
- | 减法运算符,求两数之差 | a-b,5.1f-2.9f |
* | 乘法运算符,求两数之积 | a*b,9.5m*3.1415926m |
/ | 除法运算符,求两数之商 | a/b,5m/3m |
% | 取模运算符,求两数相除后的余数 | a%b,9%4 |
++ | 递增运算符,在整数变量基础上加1,将新值赋予原变量。 | a++,n++ |
-- | 递减运算符,在整数变量基础上减1,将新值赋予原变量。 | a--,m-- |
在表2-5中,前5种运算符与数学的基本运算紧密关联,依次对应基本运算的加、减、乘、除和求余等,其使用方法也与数学基本运算遵循相同的规则。例如,在除法运算中,除法运算符“/”两侧分别是除法运算的除数和被除数。除数可以是任意实数,被除数则为不能为0的任意实数。
递增运算符“++”和递减运算符“--”是两种特殊的一元运算符(所谓元,即操作数的数量。一个操作数为一元,两个操作数为二元,依此类推),其除了分别进行加法运算和减法运算以外,还带有赋值的功能。以递增运算符“++”为例,两种方式如下所示。
Value++;
++Value;
以上两种方式的区别在于,前缀方式的加法运算是先进行加法运算再进行赋值,后缀方式则是先赋值在进行加法运算。使用如下两段代码即可了解这两种方式的区别。
int a = 5;
int b = ++a;
Console.WriteLine("a=" + a + ",b=" + b);//输出:a=6,b=6
在上面的运算中,++a先将a的值加1,此时a的值为6,然后再将a的新值赋予b,因此b的值也是6。
int a = 5;
int b = a++;
Console.WriteLine("a=" + a + ",b=" + b);//输出:a=6,b=5
在上面的运算中,会先将a的值5赋予b,然后再对a进行递增运算,将新的值赋予a,因此a的值为6,b的值为5。
2.赋值运算符
赋值运算符的作用是为常量和变量进行初始化,或为变量赋予一个新的值。赋值运算符即变量赋值的方法,可以使用赋值运算符“=”进行赋值操作。赋值运算符不仅可以在变量被声明时为变量赋值,还可以对已初始化的变量进行赋值,方法如下。
VariableName = NewValue ;
在上面的代码中,关键字VariableName表示被赋值的变量,NewValue表示变量的新值。赋值运算符可以为所有未标识const修饰符的变量赋值。如为某个变量多次赋值,则该变量的值已最新的赋值为准,代码如下。
int a = 9;
a = 12;
Console.WriteLine(a);//输出12
算术赋值的作用是结合算术运算为变量赋值,其主要包括5种基本的赋值类型,所使用的运算符与基本算术运算的5种运算符一一对应,如表2-6所示。
表2-6 算术赋值运算符
运算符 | 作用 | 表达式 | 相似表达式 |
+= | 加法赋值运算,先对变量进行加法运算,再将新值赋予变量 | a+=b | a=a+b |
-= | 减法赋值运算,先对变量进行减法运算,再将新值赋予变量 | a-=b | a=a-b |
*= | 乘法赋值运算,先对变量进行乘法运算,再将新值赋予变量 | a*=b | a=a*b |
/= | 除法赋值运算,先对变量进行除法运算,再将新值赋予变量 | a/=b | a=a/b |
%= | 取模赋值运算,先对变量进行取模运算,再将新值赋予变量 | a%=b | a=a%b |
在使用算术赋值运算时,需要先对运算符两侧的变量进行相应的算术运算,然后再将运算的结果赋予运算符左侧的变量,代码如下。
int a = 22;
writeline方法的作用a += 1;
Console.WriteLine(a);//输出:23
在上面的代码中,就使用了加法赋值运算符“+=”对变量a进行加法赋值运算,输出的结果相当于先对变量a进行加法运算,再将运算的结果赋予变量a。
之前介绍的递增运算符“++”和递减运算符“--”可以被视为“+ =”和“- =”等两种赋值运算符的特殊形式。 | |
3.关系运算
关系运算又被称作比较运算,其作用是对运算符两侧的表达式进行比较,获取一个比较后的结果,如成立则返回逻辑真(true),否则返回逻辑假(false)。关系运算是一种重要
的运算,其通常作为条件分支控制语句和迭代语句中的条件存在,判定语句是否执行。常见的关系运算如表2-7所示。
表2-7 关系运算符
运算符 | 名称 | 运算符 | 名称 |
== | 等于运算符,验证两表达式相等。 | != | 不等运算符,验证两表达式不相等。 |
< | 小于运算符,验证左侧表达式小于右侧表达式。 | > | 大于运算符,验证左侧表达式大于右侧表达式。 |
<= | 小于等于运算符,验证左侧表达式小于或等于右侧表达式。 | >= | 大于等于运算符,验证左侧表达式大于或等于右侧表达式。 |
is | 主要用于判定对象是否属于某个类的实例。 | as | 在兼容的引用类型之间执行某些类型的转换,其只执行引用转换和装箱转换,无法执行用户自定义的转换。 |
&& | 逻辑与运算符,当两个表达式中包含逻辑假(false)时返回逻辑假(false),如均为逻辑真(true)则返回逻辑真(true)。 | || | 逻辑或运算符,当两个表达式中包含逻辑真(true)时返回逻辑真(true),否则返回逻辑假(false)。 |
! | 逻辑非运算符,对某个表达式取反,当其为逻辑真(true)时返回逻辑假(false),否则返回逻辑真(true)。 | & | 按位与运算符,将两个数据转换为二进制,然后依数位进行逻辑与运算。 |
| | 按位或运算符,将两个数据转换为二进制,然后依数位进行逻辑或运算。 | ~ | 按位取反运算符,将数据转换为二进制,然后每一位应用1的补码,并返回结果。 |
^ | 按位异或运算符,将两个数据转换为二进制,如同数位相同返回0,否则返回1。 | << | 左移运算符,将左侧操作数转换为二进制,再将数位向左移动右侧操作数个位置,空出的位置补0。 |
>> | 右移运算符,将左侧操作数转换为二进制,再向右移动操作数的位置,多余的位置省略。 | &= | 按位与赋值,先对运算符左侧的操作数进行按位与运算,再将所得结果赋予该操作数。 |
|= | 按位或赋值,先对运算符左侧的操作数进行按位或运算,再将所得的结果赋予该操作数。 | ^= | 按位异或赋值,先对运算符左侧的操作数进行按位异或运算,再将所得的结果赋予该操作数。 |
<<= | 左移按位赋值运算,将变量的值转换为二进制数字,再左移若干位,将新值赋予变量。 | >>= | 右移按位赋值运算,将变量的值转换为二进制数字,再右移若干位,将新值赋予变量。 |
4.连接运算符
连接运算的作用是将若干字符串型变量连接为一个整体的字符串变量,其需要使用到连接运算符。例如,将两个字符串连接在一起,代码如下。
string zh = "我们" , g = "学习.NET编程";
Console.WriteLine(zh + g);//输出:我们学习.NET编程
5.溢出检测运算
在进行整数的运算和显式数据转换时,如运算的结果或显式数据转换超出了原数据类型涵盖的范围时,则可以使用溢出检测技术,其细分为以下4种情况。
● 预定义的“++”或“--”等一元运算符,当其操作数类型为整数型时。
● 预定义的“-”二元运算符,当期操作数类型为整数型时。
● 预定义的“/”等二元操作符,当两个操作数数据类型都是整数型时。
● 从一种整数型到另一种整数型显式数据转换时。
当上述整数运算产生一个目标类型无法表示的数字时,需要使用溢出检测运算符checked和unchecked等,按照以下相应的处理方式进行溢出检查。例如,使用使用checked运行符,则若运算是常量表达式,则产生编译错误:The operation overflows at complie time in checked mode。而使用使用unchecked运行符,则无论运算是否是常量表达式,只要没有编译错误或运行时异常发生,返回值被截掉不符合目标类型的高位
若运算是常量表达式,默认情况下总是进行溢出检查,同使用checked一样,无法通过编译。若运算是非常量表达式,则是否进行溢出检查取决于外部因素,包括编译器状态、执行环境参数等。
6.条件运算
条件运算顾名思义是根据指定的条件决定如何进行运算的一种运算方式,其可以代替一些简单的条件语句,实现条件的判定和执行。在进行条件运算时,需要使用条件运算符“?:”,其使用方法如下所示。
Condition?Action1:Action2;
在上面的代码中,Condition关键字即判定条件执行的表达式,其必须为逻辑型数据或可隐式转换为逻辑型数据的表达式,Action1为当条件表达式值为“真”时,执行该语句;Action2为当条件表达式值为“假”时,执行该语句。
例如,编写一个求绝对值的程序,根据变量值进行判断,并返回结果的绝对值,代码如下。
int a = 5;
int b = 9;
int result = 0;
result=a > b ? a - b : b - a;
Console.Write(result); //结果:4
条件运算符所组成的内容虽然比较复杂,但其本身仍然属于一个表达式,因此不能独立作为一个语句存储到行中,必须拥有一个赋值的过程。 | |
7.运算的优先级
在进行数据运算时,如果使用了多个运算符进行复杂的运算,则各种运算的步骤先后顺序往往会影响运算的结果。为此计算机中根据数学中的四则运算方式,对运算符进行了优先级的考虑,如表2-8所示。
表2-8 运算符的优先级表
优先级 | 运算符 |
1 | ()、x.y、f(x)、a[x]、x++、x--、new、checked、unchecked |
2 | +、-、|、~、++x、--x、(T)x |
3 | *、/、% |
4 | +、- |
5 | <<、>> |
6 | <、>、<=、>=、is |
7 | == |
8 | & |
9 | ^ |
10 | | |
11 | && |
12 | || |
13 | ?: |
14 | =、*=、/=、+=、-=、<<=、>>=、&=、^=、|= |
在上表中,优先级数字越小,则优先级越高,优先级数字越大,则优先级越低。当所执行的运算处于同一优先级时,默认以自左至右的顺序进行运算。而如果运算具有优先级的差异,则先计算优先级较高的运算,再计算优先级较低的运算。
如果用户需要改变表达式中的运算过程,则可以使用括号将需要优先运算的运算符和操作数用括号括起来。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论