C#基础知识系列四(运算符汇总)
本节主要来讲C#中的各种运算符。主要包括is运算符、as运算符、checked和unchecked运算符、sizeof运算符、空接合运算符(??)、&和&&、移位运算符、增量和减量运算符、条件运算符(三元运算符)、命名空间别名限定符。
正文
1、is运算符
is运算符可以检查对象是否与特定的类型兼容。比如下例中要检查变量是否与object类型兼容:
int i=0; if(i is object) { Console.WriteLine("i is an object."); }
2、as运算符
as运算符用于执行引用类型的显式类型转换。如果要转换的类型和指定的类型兼容,转换就会成功进行;如果类型不兼容,,as运算符就会返回值null。举例如下:
static void Main(string[] args) { object obj1 = "a string"; object obj2 = 5; string str1 = obj1 as string; string str2 = obj2 as string; Console.Write("str1为{0}\r\n", str1); Console.Write("str2为{0}", str2); Console.ReadLine(); }
注:as运算符允许在一步中进行安全的类型转换,不需要先使用is运算符测试类型,再执行转换。
3、checked和unchecked运算符
static void Main(string[] args) { byte b = 255; b++; Console.WriteLine("第一个"+b.ToString()); try { byte c = 255; checked { c++; //抛出OverflowException Console.WriteLine(b.ToString()); } } catch (Exception e) { Console.WriteLine("抛出异常"); } Console.ReadLine(); }
byte数据类型只能包含0~255的数,所以b值的增量会溢出。CLR如何处理溢出?C#提供了checked和unchecked运算符。如果把一块代码段标志为checked,CLR就会执行溢出检查,如果发生异常,就抛出异常。
如果要禁止溢出检查,可以把代码标记为unchecked。
注:unchecked是默认值。只有在需要把几个未检查的代码行放在一个明确标记为checked的大代码块中,才需要显式使用unchecked关键字。
4、sizeof运算符sizeof可以用来确定堆栈中值类型需要的长度(单位是字节):
5、空接合运算符(??)
空接合运算符为处理可空类型和引用类型时表示Null值的可能性提供了一种快捷方式。这个运算符放在两个操作数之间,第一个操作数必须是一个可空类型或引用类型,第二个操作数必须与第一个操作数的类型不同,或者可以隐含地转换为第一个操作数的类型。空接合运算符的计算如下:如果第一个操作数不是null,则整个表达式就等于第一个操作数的值。但如果第一个操作数是null,则整个表达式就等于第二个操作数的值。例如:
int?a=null; int b; b=a??10; // b的值为10; a=15; b=a??10;// b的值为15;
6、&和&&
&:二元运算符 (&) 为整型和 bool 类型预定义了二进制 & 运算符。对于整型,& 计算操作数的按位“与”。对于 bool 操作数,& 计算操作数的逻辑“与”;也就是说,当且仅当两个操作数均为 true 时,其结果才为 true。
&&:条件“与”运算符 (&&) 执行布尔操作数的逻辑“与”运算,但如有必要,只计算第二个操作数。它与二元运算符 (&)很像,不同的是,如果 x 为 false,则不计算 y(因为不论 y 为何值,与操作的结果都为 false)。这被称作为“短路”计算。
稍微提一下按位“与”:
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
即:两位同时为“1”,结果才为“1”,否则为0
例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1。
5&7 即 0000 0101 & 0000 0111 = 0000 0101 因此,5&7的值得5。
7、移位运算符
是用<<(左移) 和 >>(右移) 运算符是用来执行移位运算。
左移 (<<)
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/67218.html