文章出處

  這一篇我們來講解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#中運算符重載

對于自定義類和結構,你可以更改運算符的行為。 此過程稱為“運算符重載”。

 


文章列表


不含病毒。www.avast.com
全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()