zoukankan      html  css  js  c++  java
  • .NET基础——运算符

      这一篇我们来讲解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#中运算符重载

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

  • 相关阅读:
    Ubuntu中pip的疑难杂症
    Python 分类方法记录
    Python 绘制热图
    脚本学习
    Ubuntu 基础使用教程
    机器学习各种相似性度量及Python实现
    Ubuntu 16.04安装R及Rstudio
    机器学习和数据挖掘领域大牛
    vux+vue-cli3.0坑
    函数的抖动以及节流
  • 原文地址:https://www.cnblogs.com/lcxBlog/p/4502964.html
Copyright © 2011-2022 走看看