.NET基础2

  这一篇我们来讲解C#中的运算符

1. C#中的算术运算符 

  5个算数运算符:+  -  *  /  %   

   它们都是二元运算符,*  /  % 的运算优先级相同,并且高于 +  - ,+  - 的运算优先级也是相同的。我们可以通过小括号来改变计算的优先级,注意:小括号一定要成对出现。

  运算符两边的操作数的类型,要求一致,运算得到的结果也会与操作数的类型一致。

            int x = 10, y = 3;
            //得到的结果是 3
            Console.WriteLine("num = {0}", x / y * 1.0);    

 

     x / y * 1.0 这个表达式,先计算 x/y ,得到结果为3, 3再乘以1.0,结果是3.0,但输出的时候,不会输出3.0,而是3

            double vvv = 3 * 1.0;
            //得到结果是 3
            Console.WriteLine("vvv = {0}",vvv);

    int类型 乘以 double类型,结果是会被自动转换成double类型。

            int x = 10, y = 3;
            //得到的结果是 3.33333333333333
            Console.WriteLine("num = {0}", x / (y * 1.0));

2. C#中的赋值运算符

  6个赋值运算符: =    +=    -=    *=    /=   %=

   它们在进行运算时,要求参与运算的操作数的类型必须相同,并且其运算结果也与操作数的类型相同。假如,参与运算的操作数的类型不一致时,会根据类型自动转换规则进行转换。

  这6个运算符的优先级都相同,在所有运算符中优先级是最低的

3. C#中的逻辑运算符

  3个逻辑运算符: &&(且)    ||(或)    !(非)

  只有 ! 是一元运算符,其他的都是二元运算符

  优先级  ! >    &&   >  || 

  参与运算的必须是计算结果为bool类型的表达式,如 4 > 2

  (表达式) && (表达式)   只有当两个表达式全为true的时候,结果才为true

  (表达式)  || (表达式)   只有当两个表达式全为false的时候,结果才为false

  !(表达式)   进行取反操作,表达式为true的时候,结果为false;反之为true

  注意: &&   ||   会出现短路的情况

            int a = 10;
            int b = 5;
            //当逻辑与中前面一个表达式的结果为false,后面那个表达式就不参与运算了,造成短路
            bool result = ++a > 50 && ++b > 1;
            Console.WriteLine("a = {0}   b = {1}",a,b);
            //a = 11   b = 5

            //当逻辑或中前面一个表达式的结果为true,后面那个表达式就不参与运算了,造成短路
            bool res = ++a < 50 || ++b < 1;
            Console.WriteLine("a = {0}   b = {1}", a, b);
            //a = 12   b = 5

4. C#中的关系运算符

  6个关系运算符: >   <  ==  !=   >=   <=

  它们的运算结果都是bool类型,参与运算的操作数的类型也必须相同。

5. C#中的自增、自减运算符

  包括这两种: ++    --       运算符在操作数前后的位置又可以分为前置和后置

  后置的优先级高于前置

  1. 后置

  当number++ 或 number-- 参与表达式运算时,由于运算符在number后面,所以在运算时,先用number的值参与表达式的运算,再将number的值+1 或 -1。

    int  res = 10 + number++;
    我们可以理解成:
    int res = 10 + number;
    number = number + 1;

   于是我们得到结论:++  -- 后置的时候,无论所在的表达式有多么复杂,都要先等表达式计算完成后,在执行 ++ 或 -- 的运算。

            int age = 18;
            /*后置自加位于表达式中时,无论表达式有多么复杂,只有等到表达式
            运算完成的时候,才执行后置的++  */
            int sum = (age++ + 12) * 3 - 10;
            //上面这句话相当于 
            //int sum = (age + 12) * 3 - 10;
            //age++;

            Console.WriteLine("age = {0}", age); // age = 19
            Console.WriteLine("sum = {0}", sum); // sum = 80

  2. 前置

    当++number 或 -- number参与表达式运算时,由于运算符在number前面,所以在运算时,先将number的值+1 或 -1,再用number的值参与表达式的运算 。

    int res = 10 + ++number;
    我们可以理解成:
    number = number + 1;
    int res = 10 + number;

      例子:

            int var1, var2 = 5, var3 = 6;

            var1 = var2++ * --var3;
            //var1 = 25,var2 = 6,var3 = 5
            Console.WriteLine("var1 = {0},var2 = {1},var3 = {2}", var1, var2, var3);

            var1 = 0; var2 = 5; var3 = 6;
            var1 = ++var2 * var3--;
            //var1 = 36,var2 = 6,var3 = 5;
            Console.WriteLine("var1 = {0},var2 = {1},var3 = {2}", var1, var2, var3);

6. C#中三元运算符

  语法:  条件 ? 结果1 : 结果2

    int a = 2;
    int c = 3;
    int b = (a>c) ? a : c;
    // b 的值为3

   与 if - else语句等价

    int a = 2;
    int c = 3;
    int b;
    if ( a > c )
    {
       b = a;  
    }
    else
    {
       b = c; 
    }

 7. C#中运算符表

  按照运算符的优先级进行排列

  这里列举一些常用的运算的优先级,下面按照从高到低的顺序排列了运算符的优先级。关于运算符的详细情况,请查阅 https://msdn.microsoft.com/zh-cn/library/ms173145.aspx

 技术分享

 算术运算符中   *  /  %  的优先级高于 +  -

技术分享

技术分享

8. C#中运算符的结合性

  按方向来分,分为左结合和右结合

  左结合运算符按从左到右的顺序计算。 例如,x * y / z 将计算为 (x * y) / z。 右结合运算符按从右到左的顺序计算。 例如,赋值运算符是右关联的。

  赋值运算符和三元运算符 (?:) 是右结合运算符。 其他所有二元运算符都是左结合运算符。

   无论表达式中的运算符是左结合运算符还是右结合运算符,都将先从左至右评估各表达式的操作数。

9. C#中运算符重载

对于自定义类和结构,你可以更改运算符的行为。 此过程称为“运算符重载”。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。