文章教程

3.10运算符

8/31/2020 9:56:04 PM 人评论 次浏览

图片 1 知识点讲解:光盘:视频\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)有括号时,要首先计算括号里面的表达式,括号的优先级顺序是“()”>“[]”>“{}”。

教程类别