C#编程(三十八)----------运算符

原文链接: http://blog.csdn.net/shanyongxu/article/details/46877353

运算符


类别


运算符


算术运算符


+ - * /


逻辑运算符


& | ^ ~ && || ~


字符串连接运算符


+


增量和减量运算符


++ --


移位运算符


<< >>


比较运算符


== != < > <= >=


赋值运算符


= += -= *= /=  %=  &=  |= ^=  >>=  <<=


成员访问运算符运算符(用于对象和结构)


.


索引运算符(用于数组和所引起)


[]


类型转换运算符


()


条件运算符(三元运算符)


?:


委托连接和删除运算符


+ -


对象创建运算符


new


类型信息运算符


sizeof is typeof as


溢出异常控制运算符


checked unchecked


间接寻址运算符


[]


名称空间别名限定符


::


空额合并运算符


??

sizeof,*,->和&只能用于不安全的代码,注意sizeof运算符在早期版本中使用,自从.NET 2以来就不要了.

使用C#运算符 最大的一个缺点是与C风格的语言类似,对于赋值(=)和比较(==)运算符C#使用不同的运算符.例如:

x=3  //x等于3

如果要比较x与另一个值:

if(x==3)

{}

因为C#非常严格的类型安全则防止出现常见的C错误,比如在C中不出错的:

if(x=3)

{}

这在C#中是错误的.

在C#中使用加号(+)连接字符串,使用”&”发号表示连个不同整数值的按位AND运算,”|”符号表示两个整数值的按位OR运算.C#中海油取模运算符(%),7%5的结果为2.

C#很少使用指针和间接寻址运算符(->)

C#中的拥有简化赋值操作符:

例如:x++等价于x=x+1;x*=y等价于x=x*y

C#中的++x和x++的意思是不一样的,一个是前置,一个是后置 .案例:

int x=1;

if (++x==2)//因为这里是前置,所以先执行+1操作,x为2

{

Console.WriteLine("x=2");

}

if (x++==3)//因为这里是前置,所以先判断,然后再执行+1操作

{

Console.WriteLine("x=3");

}

Console.WriteLine(x);

Console.ReadKey();

下面介绍C#中频繁使用的基本运算符和类型强制转换运算符.

1条件运算符

条件运算符(?:)也成三元运算符:

condition ? true_value : false_valur

condition 为要判断的布尔表达式,true_value是condition为true时返回的值,false_value是condition为false时返回的值.

案例:

int x=1;

string s = x + " ";

s += (x == 1 ? "man" : "men");

Console.WriteLine(s);

2 .checked和unchecked

案例:

byte b = 255;

b++;

Console.WriteLine(b.ToString());

Console.ReadKey();

因为byte数据类型只能包含0~255的数,所以递增b的值会导致溢出.输出b的值为0.

如果把代码修改一下:

byte b = 255;

checked

{

b++;

}

Console.WriteLine(b.ToString());

Console.ReadKey();

CLR就是执行溢出检查,如果发生溢出,就会抛出异常.

执行代码会抛出异常.

如果要禁止异常检查,则可以把代码标记为unchecked

byte b = 255;

unchecked

{

b++;

}

Console.WriteLine(b.ToString());

Console.ReadKey();

本例中,不会抛出异常,但会丢失数据,因为byte数据类型不能包含256,溢出的位会丢弃,所以b的值为0.

注意,unchecked是默认行为.只有在需要把几行未检查的代码放在一个显式的标记为checked的大代码块中,才需要显示的使用unchecked关键字.

3.is运算符

is运算符可以检查对象是否与特定的类型兼容.”兼容”表示对象或该类型,或者派生自该类型.例如,要检查变量是否与object类型兼容,可以使用下面的代码:

int i = 10;

if (i is object)

{

Console.WriteLine("i is object");

}

4.as运算符

5.as运算符用于执行引用类型的显示类型转换.如果要转换的类型于指定的类型兼容,转换就会成功进行:如果类型不兼容,as运算符就会返回null值.如下例,如果object引用实际上不引用string实例,把object引用转换为string就会返回null:

object o1 = "some string";

object o2 = 5;

string s1 = o1 as string;

string s2 = o2 as string;

as运算符允许在一部中进行安全的类型转换,不需要先使用is运算符测试类型,在执行转换

5.sizeof运算符

使用sizeof运算符可以确定栈中值类型需要的长度(单位是字节):

Console.WriteLine(sizeof(int));

结果显示4,因为int有四个字节.

如果对于复杂类型(和非基元类型)使用sizeof运算符,就需要把代码放在unsafe块中,如下:

unsafe

{

Console.WriteLine(sizeof(Person));

}

6.typeof运算符

typeof运算符返回一个表示特定类型的System.Type对象.例如,typeof(string)返回表示System.String类型的Type对象.在使用反射技术动态的查找对象的相关信息时,这个运算符很有用.

7.可空类型和运算符

对于布尔类型,可以给他指定true或false值.但是,要把该类型的值定义为undefined,该怎么办>此时使用可空类型可以给应用程序提供一个独特的值.如果在程序中使用可空类型,就必须考虑null值在与各种运算符一起使用时的影响.通常可空类型与一元或二元运算符一起使用时,如果其中一个操作数或两个操作数都输null,其结果就是null.例如:

int? a = null;

int? b = a + 4;//b=null

int? c = a * b;//c=null

但是在比较可空类型时,只要有一个操作数是null,比较结果就是false.既不能因为一个条件是false,就认为该条件的对立面是true,这在使用非可空类型的程序中很常见.例如:

int? a = null;

int? b = -5;

if (a>=b)

{

Console.WriteLine("a>=b");

}

else

{

Console.WriteLine("a<b");

}

8.空合并运算符

空合并运算符(??)提供了一种快捷方式,可以在处理可空类型和引用类型时表示null可能的值.这个运算符放在两个操作数之间,第一个操作数必须是一个可空类型或引用类型;第二个操作数必须与第一个操作数的类型相同,或者可以隐含的转换为第一个操作数的类型.空合并运算符的计算如下:

如果第一个操作数不是null,整个表达式就等于第一个操作数的值.

如果第一个操作数是null,整个表达式就等于第二个操作数的值.

案例:

int? a = null;

int b;

b = a ?? 10;

Console.WriteLine(b);

a = 3;

b = a ?? 10;

Console.WriteLine(b);

运算符的优先级(从高到低的顺序)



运算符


初级运算符


() . [] x++ x-- new typeof sizeof checked uncheched


一元运算符


+ - ! ~ ++x --x和数据类型强制转换


乘除运算符


* / %


加减运算符


+ -


移位运算符


<< >>


关系运算符


< > <= >= is as


比较运算符


== !=


按位AND运算符


&


按位XOR运算符


^


按位OR运算符


|


布尔AND运算符


&&


布尔OR运算符


||


条件运算符


?:


赋值运算符


= += -= *= /= %= &= |= ^= <<= >>= >>>=

注意:在复杂的表达式中,应避免利用运算符又声称正确的结果,使用圆括号指定运算符的执行顺序,可以使代码更整洁,避免出现潜在的冲突.

时间: 2024-10-09 07:55:16

C#编程(三十八)----------运算符的相关文章

QT开发(三十八)——Model/View框架编程

QT开发(三十八)--Model/View框架编程 一.自定义模型 1.自定义只读模型 QAbstractItemModel为自定义模型提供了一个足够灵活的接口,能够支持数据源的层次结构,能够对数据进行增删改操作,还能够支持拖放.QT提供了 QAbstarctListModel和QAbstractTableModel两个类来简化非层次数据模型的开发,适合于结合列表和表格使用. 自定义模型需要考虑模型管理的的数据结构适合的视图的显示方式.如果模型的数据仅仅用于列表或表格的显示,那么可以使用QAbs

程序员的奋斗史(三十八)——大学断代史(二)——我与数据库的故事

文/.温国兵 惰性人皆有之,也算是人的一大天性.几日之前便构思好此文,怎奈每日杂事繁多,今日才提起笔,作下此文.本文谈谈我与数据库的故事. 说起和数据库结缘,还得从大一说起.大一刚开始接触C语言,每日就沉浸在无止境的代码中.在网上查资料的过程中,看到别人用C语言写了一个小型的图书操作程序,数据库采用的是SQL Server,运行出来的效果图很炫,惊叹原来还可以这样管理数据.熟知C语言的同学肯定对文件操作不陌生,当时我们写程序如果有静态数据,都是放在文件里的.直到后来做的C语言课程设计,我也是一大

NeHe OpenGL教程 第三十八课:资源文件

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十八课:资源文件 从资源文件中载入图像: 如何把图像数据保存到*.exe程序中,使用Windows的资源文件吧,它既简单又实用. 欢迎来到NeHe教程第38课.离上节课的写作已经有些时日了,加上写了一整天的code,也许笔头已经

三十八、git merge简介

git merge的基本用法为把一个分支或或某个commit的修改合并现在的分支上. 我们可以运行git merge -h查看其命令usage: git merge [options] [<commit>...]    or: git merge [options] <msg> HEAD <commit>    or: git merge --abort -n                    do not show a diffstat at the end of

&nbsp; CCNA实验三十八 ZFW(区域防火墙)

CCNA实验三十八 ZFW(区域防火墙) 环境:Windows XP .Packet Tracert5.3 目的:了解ZFW的原理与基本配置 说明: ZFW(Zone-Based Policy Firewall),是一种基于区域的防火墙,基于区域的防火墙配置的防火墙策略都是在数据从一个区域发到另外一个区域时才生效,在同一个区域内的数据是不会应用任何策略的,所以我们就可以将需要使用策略的接口划入不同的区域,这样就可以应用我们想要的策略.但是,有时某些接口之间可能不需要彼此使用策略,那么这样的接口只

微信小程序把玩(三十八)获取设备信息 API

原文:微信小程序把玩(三十八)获取设备信息 API 获取设备信息这里分为四种, 主要属性: 网络信息wx.getNetWorkType, 系统信息wx.getSystemInfo, 重力感应数据wx.onAccelerometerChange, 罗盘数据wx.onCompassChange wxml <button type="primary" bindtap="getNetWorkType">获取网络类型</button> <butt

第三十八象 辛丑

第三十八象 辛丑 谶 曰门外一鹿 群雄争逐劫及鸢鱼 水深火热 颂 曰火运开时祸蔓延万人後死万人先海波能使江河浊境外何殊在目前 金圣叹注解:此象兵祸起於门外有延及门内之兆 推背图网解:第三十八象应卦噬嗑.噬嗑形同张开利牙的大嘴撕扯肉食,用现在的话讲好比是一台正在工作的绞肉机.易曰:“雷电噬嗑,先王以明罚敕法.”噬嗑卦上雷下日.雷电大作,是要降妖除魔:先王严明刑罚,是为整饬法令.卜到此卦,令妖魔鬼怪胆寒,然而前景却是一片光明. 谶辞:门外一鹿何来群雄争逐?所谓门外,此处为大陆之外,即海中.鹿者,山麓

Java编程思想(十八) —— 再谈反射

在Java编程思想(十五) -- 类型信息之反射和Java编程思想(十六) -- 联系JVM再谈Class,书上只用了3页就讲完了,还有讲了那么多Class的东西,接下来要从反射中怎么用,自己结合API和其他资料再写多一些. 示例:Test.java public class Test { public Test() {     }      public Test(int i) {         System.out.println(i);     } private void pri()

【FastDev4Android框架开发】打造QQ6.X最新版本侧滑界面效果(三十八)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50253925 本文出自:[江清清的博客] (一).前言: 这两天QQ进行了重大更新(6.X)尤其在UI风格上面由之前的蓝色换成了白色居多了,侧滑效果也发生了一些变化,那我们今天来模仿实现一个QQ6.X版本的侧滑界面效果.今天我们还是采用神器ViewDragHelper来实现,之前我们以前基于ViewDragHelper的使用和打造QQ5.X效果了,基本使用方法可以点

Deep learning:三十八(Stacked CNN简单介绍)

http://www.cnblogs.com/tornadomeet/archive/2013/05/05/3061457.html 前言: 本节主要是来简单介绍下stacked CNN(深度卷积网络),起源于本人在构建SAE网络时的一点困惑:见Deep learning:三十六(关于构建深度卷积SAE网络的一点困惑).因为有时候针对大图片进行recognition时,需要用到无监督学习的方法去pre-training(预训练)stacked CNN的每层网络,然后用BP算法对整个网络进行fin