遞增遞減運算子

除了基本的數學運算,程式運算存在一種違背數學邏輯的運算式,這種運算式允許運算元本身經過加 1 或是減 1 的運算之後,再將結果指定給自已,如下式:
intResult = 5 + intResult ;
其中變數 intResult 加上一個數值等於5的常數之後,再將結果指定給自已,經過設值運算子的運算之後, intResult 所儲存的值為自已本身原先的值加上 5 ,如下式:



第一行的 intResult 變數儲存的值等於 10 ,第二行變數值改變了之後,再重新儲存指向自已。此種形式的運算被大量的運用在程式運算當中,遞增遞減運算子則專門用於此類型的運算操作,可進一步的簡化程式碼。另外,上述程式碼可以改寫如下:
intResult += 5  ;
這段運算式計算所得的結果完全與上式相同,其中的 += 運算子由加法運算子以及設值運算子組合而成,同理,其他的算術運算子也可以進行相同的運算邏輯,這些運算子分別是 += 、 -= 、 *= 、 /= 以及 %= 等。
C# 另外提供 ++ 以及 -- 兩個運算子,對指定數值的運算元進行一個單位值的運算,例如底下的運算式:
x=10 ; 
x++ ;
其中運算子 ++ 將變數 x 加上 1 ,因此當第二行執行完成之後, x 的值變成 11 ,同理,若是使用 -- 代替, 則會將指定的變數減 1 。

這兩種運算子另外有一種形式的運算模式,以 ++ 為例,如下式,運算子本身放置於運算元的前方:
++x 
此種類型的運算子稱之為前置運算子(prefix),而上面提到的類型則是後置運算子(postfix),其中最大的差別在於,使用前置運算子的運算式所得到的結果為變數運算之前的結果,而後置運算子所得到的結果則是變數值運算之後的值。



從上面的圖示中,你應該可以很明顯的看出前置運算與後置運算的差異,無論如何, x變數最後的值都將會是加上 1 之後的結果。

以下利用一個範例,說明遞增遞減運算子以及前置後置算子的運算結果。
class Program
{
    static void Main(string[] args)
    {
        int intR;
        int intX;
        int intAdd;

        Console.WriteLine("請輸入整數值X :");
        intR = int.Parse(Console.ReadLine());
        Console.WriteLine("請輸入所要加總的數值:");
        intAdd = int.Parse(Console.ReadLine());

        intX = intR;
        intX = intX + intAdd;
        Console.WriteLine
         ("使用運算式\"intX = intX+intAdd\" 運算結果等於{0}", intX);

        intX = intR;
        intX += intAdd;
        Console.WriteLine
         ("使用運算式\"intX +=intAdd\" 運算結果等於{0}", intX);

        int intPre;
        int intPost;
        intX = intR;
        intPost = intX++;
        intX = intR;
        intPre = ++intX;

        Console.WriteLine
        ("使用運算式\"intX++\" 運算結果等於{0} ", intPre);
        Console.WriteLine
        ("使用運算式\"++intX\" 運算結果等於{0} ", intPost);
        Console.WriteLine
        ("使用運算式\"intX\" 運算結果等於{0} ", intX);
        Console.ReadLine();
    }
}
一開始定義 intR 、 intX 以及 intAdd 三個變數,其中的 intR 與 intAdd 取得使用者於主控台輸入的數值,然後針對取得的 intR 內容值的 intX 與 intAdd 進行加總運算,並且於17 行輸出運算結果,接下來執行相同的動作,只是此次第 20 行改以 += 取代 + 運算子。

宣告兩個 int 型別變數 - intPre 與 intPost,用來儲存稍後針對 intX 變數執行的前置與後置運算結果,完成前置與後置運算,程式最將結果輸出於主控台。
請輸入整數值 X :
50
請輸入所要加總的數值 :
100
使用運算式 "intX = intX + intAdd"  運算結果等於 150
使用運算式 "intX += intAdd"  運算結果等於 150
使用運算式 "intX++"  運算結果等於 51
使用運算式 "++intX"  運算結果等於 50
使用運算式 "intX"  運算結果等於 51
從範例輸出結果可以很明顯的看見 += 與 + 得到相同的結果,而前置與後置運算所輸出的值,與稍早課程的說明原理相印證。


沒有留言: