• 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#中的++xx++的意思是不一样的,一个是前置,一个是后置 .案例:

    int x=1;

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

                {

                    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_valueconditiontrue时返回的值,false_valueconditionfalse时返回的值.

    案例:

    int x=1;

                string s = x + " ";

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

                Console.WriteLine(s);

    2 .checkedunchecked

    案例:

     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.可空类型和运算符

    对于布尔类型,可以给他指定truefalse.但是,要把该类型的值定义为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运算符

    ||

    条件运算符

    ?:

    赋值运算符

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

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

  • 相关阅读:
    CSS:关于CSS Hack
    JS数据交互:动态从数据库中获取数据填充Select
    Oracle数据库—— 事务处理与并发控制
    Java 实现任意N阶幻方的构造
    Java 实现奇数阶幻方的构造
    Web前端开发笔试&面试_03
    任意多边形的几何变换
    关于网站劫持
    mysql 出现Host 'localhost' is not allowed to connect to this MySQL server 错误
    mysql 导入表数据中文乱码
  • 原文地址:https://www.cnblogs.com/android-blogs/p/6598592.html
Copyright © 2020-2023  润新知