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#中运算符重载

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

  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    微信小程序TodoList
    C语言88案例-找出数列中的最大值和最小值
    C语言88案例-使用指针的指针输出字符串
  • 原文地址:https://www.cnblogs.com/lcxBlog/p/4502964.html
Copyright © 2011-2022 走看看