3.10 运算符
知识点讲解:光盘:视频\PPT讲解(知识点)\第3章\运算符.mp4
运算符是程序设计中重要的构成元素之一。运算符可以细分为算术运算符、位运算符、关系运算符、逻辑运算符和其他运算符。从3.9节的代码中可以看出,处理运算符是表达式的核心。现实中的常用运算符分为如下3大类。
- 一元运算符:只处理1个运算数。
- 二元运算符:处理2个运算数。
- 三元运算符:处理3个运算数。
而在日常应用中,可以根据被操作值的类型而进一步划分。在下面的内容中,将对C#运算符的基本知识进行详细介绍。
1.基本运算符
在C#中,用于基本操作的运算符称为基本运算符。常用的C#基本运算符主要包括如下几种。
(1)“.”运算符
“.”运算符的功能是实现项目内不同成员的访问,主要包括命名空间的访问,类的方法和字段的访问等。例如,在某项目中有一个mm类,而类mm内有一个方法nn,则当程序需要调用方法nn进行特定处理操作时,只需使用“mm.nn”语句即可实现调用。
(2)“()”运算符
“()”运算符的功能是定义方法和委托,并实现对方法和委托的调用。“()”内可以包含需要的参数,也可以为空。例如,下面的代码使用了括号的定义和调用功能。
int i=int32.Convert("1234");
System.Console.WriteLine("i={0}",i);
(3)“[]”运算符
“[]”运算符的功能是存储项目预访问的元素,通常用于C#的数组处理。“[]”内可以为空,也可以有1个或多个参数。例如,下面的代码通过“[]”实现了数组的定义和读取功能。
int [] mm=new int(3);
mm[0]=7;
mm[1]=3;
mm[2]=5;
(4)“++”和“−−”运算符
“++”和“−−”运算符的功能是实现数据的递增处理或递减处理。“++”和“−−”运算符支持后缀表示法和前缀表示法。例如,m++和m−−的运算结果是先赋值后递增或递减处理;而++m和−−m的运算结果是先递增或递减处理后再赋值。即前缀形式是先增减后使用,而后缀形式是先使用后增减。
(5)“new”运算符
“new”运算符的功能是创建项目中引用类型的新实例,即创建类、数组和委托的新实例。例如,下面的代码分别创建了1个新实例对象mm和新类型数组nn。
object mm=new object();
int [] nn=new int[32];
(6)“sizeof”运算符
“sizeof”运算符的功能是返回指定类型变量所占用的字节数。因为涉及数量的问题,所以sizeof只能计算值类型所占用的字节数量,并且返回结果的类型是int。
在基本类型中,“sizeof”运算符的处理结果如表3-7所示。
注意:“sizeof”运算符只能对类型名进行操作,不能对具体的变量或常量进行操作。
(7)“typeeof”运算符
“typeeof”运算符的功能是获取某类型的System.Type对象。“typeeof”运算符的处理对象只能是类型名或void关键字。如果被操作对象是一个类型名,则返回这个类型的系统类型名;如果被操作对象是void关键字,则返回System.Void。
同样,“typeeof”运算符只能对类型名进行操作,不能对具体的变量或常量进行操作。
表3-7 sizeof运算结果
表 达 式 |
结 果 |
---|---|
sizeof( byte) |
1 |
sizeof (sbyte) |
1 |
sizeof( short) |
2 |
sizeof (ushort) |
2 |
sizeof( int) |
4 |
sizeof (uint) |
4 |
sizeof( long) |
8 |
sizeof (ulong) |
8 |
Sizeof(char) |
2 |
sizeof (float) |
2 |
Sizeof(double) |
4 |
Sizeof(bool) |
1 |
Sizeof(decimal) |
16 |
2.数学运算符
数学运算符即用于算数运算的+、−、*、/和%等运算符,在其中包括一元运算符和二元运算符。数学运算符适用于整型、字符型、浮点型和decimal型。数学运算符所连接生成的表达式称为数学表达式,其处理结果的类型是参与运算类型中精度最高的类型。
C#中数学运算符的具体说明如表3-8所示。
表3-8 C#数学运算符
运 算 符 |
类 别 |
处理表达式 |
运 算 结 果 |
---|---|---|---|
+ |
二元 |
mm=nn+zz |
mm的值是nn和zz的和 |
− |
二元 |
mm=nn−zz |
mm的值是nn和zz的差 |
* |
二元 |
mm=nn*zz |
mm的值是nn和zz的积 |
/ |
二元 |
mm=nn/zz |
mm的值是nn除以zz的商 |
% |
二元 |
mm=nn%zz |
mm的值是nn除以zz的余数 |
+ |
一元 |
mm=+nn |
mm的值等于是nn的值 |
− |
一元 |
mm=−nn |
mm的值等于nn乘−1的值 |
3.赋值运算符
赋值运算符的功能是为项目中的变量、属性、事件或索引访问器元素赋一个值。除了前面经常用到的“=”外,C#中还有其他的赋值运算符,如表3-9所示。
表3-9 C#数学运算符
运 算 符 |
类 别 |
处理表达式 |
运 算 结 果 |
---|---|---|---|
= |
二元 |
mm=nn |
mm被赋予nn的值 |
+= |
二元 |
mm+=nn |
mm被赋予mm和nn的和 |
−= |
二元 |
mm−=nn |
mm被赋予mm和nn的差 |
*= |
二元 |
mm*=nn |
mm被赋予mm和nn的积 |
/= |
二元 |
mm/=nn |
mm被赋予mm除以nn的商 |
%= |
二元 |
mm%=nn |
mm被赋予mm除以nn后的余数值 |
例如,下面两段代码的含义是相同的。
mm=mm+nn;
mm+=nn;
4.比较运算符
比较运算符的功能是对项目中的数据进行比较,并返回一个比较结果。在C#中,有多个比较运算符,具体说明如表3-10所示。
表3-10 C#比较运算符
运 算 符 |
说 明 |
---|---|
mm= =nn |
如果mm等于nn,则返回true,反之返回false |
mm!=nn |
如果mm不等于nn,则返回true,反之返回false |
mm<nn |
如果mm小于nn,则返回true,反之返回false |
mm> nn |
如果mm大于nn,则返回true,反之返回false |
mm<= nn |
如果mm小于等于nn,则返回true,反之返回false |
mm >= nn |
如果mm大于等于nn,则返回true,反之返回false |
5.逻辑运算符
在日常应用中,通常使用类型“bool”对数据进行比较处理。“bool”的功能是通过返回值true和false来记录操作的结果。上述比较运算符就是一种逻辑运算符,例如表3-10中的一些操作会返回对应的操作结果。在C#中,除了上述逻辑运算符外,还有多种其他的逻辑运算符,如表3-11所示。
表3-11 C#逻辑运算符
运 算 符 |
类 别 |
处理表达式 |
运 算 结 果 |
---|---|---|---|
! |
一元 |
mm=!nn |
如果mm的值是true,则nn的值就是false,即两者相反 |
& |
二元 |
mm=nn&zz |
如果nn和zz都是true,则mm就是true,否则为false |
︱ |
二元 |
mm= nn︱zz |
如果nn或zz的值是true,则mm就是true,反之是false |
~ |
二元 |
mm= nn~zz |
如果nn和zz中只有一个值是true,则mm就是true,反之是false |
&& |
二元 |
mm= nn&&zz |
如果nn和zz的值都是true,则mm就是true,反之是false |
︱︱ |
二元 |
mm= nn︱︱zz |
如果nn或zz的值是true或都是true,则mm就是true,反之是false |
6.移位运算符
移位运算符即“<<”运算符和“>>”运算符,其功能是对指定字符进行向右或向左的移位处理。语法格式如下。
<<数值 //向左移动指定数值位
>>数值 //向右移动指定数值位
移位运算符的使用规则如下。
(1)被移位操作的字符类型只能是int、uint、long和ulong中的一种,或者是通过显示转换为上述类型的字符。
(2)“<<”将指定字符向左移动指定位数,被空出的低位位置用0来代替。
(3)“>>”将指定字符向右移动指定位数,被空出的高位位置用0来代替。
(4)移位运算符可以与简单的赋值运算符结合使用,组合成“<<=”和“>>=”。
- mm<<=nn:等价于mm=mm<<nn,即将mm<<nn的值转换为mm的类型。
- mm>>=nn:等价于mm=mm>>nn,即将mm>>nn的值转换为mm的类型。
7.三元运算符
三元运算符即“?:”运算符,又称为条件运算符。其语法格式如下。
mm?nn:zz
三元运算符的运算原则如下。
(1)计算条件mm的结果。
(2)如果条件mm为true,则计算nn,计算出的结果就是运算结果。
(3)如果条件mm为false,则计算zz,计算出的结果就是运算结果。
(4)遵循向右扩充原则,即如果表达式为“mm?nn:zz?ff:dd”,则按照顺序“mm?nn(zz?ff:dd)”计算处理。
在使用三元运算符“?:”时,必须注意如下两点。
(1)“?:”运算符的第一个操作数必须是可隐式转换为布尔类型的表达式。
(2)“?:”运算符的第二个和第三个操作数决定了条件表达式的类型。
- 如果nn和zz的类型相同,则这个类型是条件表达式的类型。
- 如果存在从nn向zz的隐式转换,但不存在从zz到nn的隐式转换,则zz类型为条件表达式的类型。
- 如果存在从zz向nn的隐式转换,但不存在从nn到zz的隐式转换,则nn类型为条件表达式的类型。
8.运算符的优先级
表达式中的运算符顺序是由运算符的优先级决定的。首先,表达式中的操作顺序默认为从左到右进行计算。如果在一个表达式内有多个运算符,则必须按照它们的优先级顺序进行计算,即首先计算优先级别高的,然后计算优先级别低的。
C#中运算符的优先级顺序如表3-12所示。
表3-12 C#运算符优先级顺序
类 别 |
运 算 符 |
左 右 顺 序 |
优先级顺序 |
---|---|---|---|
基本运算符 |
mm.nn、f(x)、mm++、mm−−、new、typeof、checked、unchecked |
从左到右 |
优 先 级 顺 序 由 高 到 低 |
一元运算符 |
+、−、!等 |
从右到左 |
|
乘除 |
*、/和% |
从左到右 |
|
加减 |
+、- |
从左到右 |
|
移位 |
<<、>> |
从左到右 |
|
关系和类型检查 |
<、>、<=、>=、is、as |
从左到右 |
|
相等 |
==、!= |
从左到右 |
|
逻辑and |
& |
从左到右 |
|
逻辑or |
︳ |
从左到右 |
|
条件and |
&& |
从左到右 |
|
条件or |
︳︳ |
从左到右 |
|
空合并 |
?? |
从右到左 |
|
条件 |
?: |
从右到左 |
|
赋值 |
=、*=、/=、%=、+=、-=、<<=、>>=、&=、~=、︳= |
从右到左 |
当在某表达式中出现多个同优先级运算符时,则按照从左到右顺序进行计算处理。并且有3个通用原则,具体说明如下。
(1)赋值运算符外的二元与运算符都是从左到右进行计算的。
(2)赋值运算符、条件运算符和空合并运算符是从右向左进行计算的。
(3)有括号时,要首先计算括号里面的表达式,括号的优先级顺序是“()”>“[]”>“{}”。
共有条评论 网友评论