2012-09-23 153 views
2

我很難理解在一個示例中Post Increment(++),Pre Increment(--)和加法/減法如何一起工作。前增量和後增量

x++表示將1加到變量中。

x--表示從變量中減去1。

但我很困惑這個例子:

int x = 2, y = 3, z = 1;` 

y++ + z-- + x++; 

我想這意味着3(+1) + 1(-1) + 2(+1)這意味着其結果應該是7

但是,當我編譯它,我得到6。我不明白。

int main() { 
    int x=2, y=3, z=1; 
    int result; 

    result = y++ + z-- + x++; //this returns 6 

    cout << result << endl; 
    return 0; 
} 
+2

搜索前綴和後綴增量/減量運算符。 –

回答

6
result = y++ + z-- + x++; 
      3  1  2 = 6 

如果執行此再次

result1 = y++ + z-- + x++; 
      4  0  3 = 7 

原因

operator++返回原始值,增加變量之前。

++operator返回遞增值

--是相同只是它的減量

10

因爲在遞增變量前,後綴operator++返回原始值。前綴operator++遞增該變量並返回對其的引用。行爲可以用一個例子來說明容易:

#include <iostream> 

int main() 
{ 
    int n = 1; 
    std::cout << n++ << "\n"; // prints 1 
    std::cout << n << "\n"; // prints 2 

    int m = 10; 
    std::cout << "\n"; 
    std::cout << ++m << "\n"; // prints 11 
    std::cout << m << "\n"; // prints 11 
} 
5

當你寫x++它使用的x的當前值,然後通過一個增加它。

想要先寫++x而不是先增加。

2

++的事情。

如果++在變量之前,例如, ++計數器,在計數器遞增後返回的值是 。如果++遵循 變量,例如計數器++,返回的值是計數器 中的值,然後遞增。

(source)

1

原因很簡單的上方。 此處使用關聯原則,根據運算符的優先級計算值。

另外X ++或X--表示...使用那麼改變...... 它將首先使用該值並將其遞增或遞減。 如果你想得到7 ... 的輸出,試試這個..它可能會工作...

result = ++ y + z-- + x ++;

+0

它將首先使用該值,然後*增量 –

3

Pre-increment operator(++p)第一值增加,併爲其分配和post increment operator(p++)第一分配的值,然後執行增量operation.Here所有變量都是後增量即它最初分配它的值(上緩衝液),然後增加(對於y和由1×)並將z減1。即 最初在緩衝區中分配3 + 1 + 2(在緩衝區值上執行加法操作),然後執行遞增/遞減操作,如x = 3,y = 4和z = 0

有關更多信息你可以閱讀What is the correct answer for cout << c++ << c;?Why are these constructs (using ++) undefined behavior?的問題

+2

OP中的代碼已定義良好,可以進行解釋。鏈接不回答這個問題。 – jrok

+0

@jrok感謝您的建議...我已添加說明... – Lionel

1

後增/減後會增加/減少該變量,但評估到變量的「前一個」值。

所以表達式result = y++ + z-- + x++將起到類似:

result = y + z + x; // result == 6 

// perform the 'post' operations 
y += 1; 
z -= 1; 
x += 1; 

但是,請記住,這是需要嚴格的編譯器將如何進行評估。對於這個表達式,結果已經很好地定義了,並且最終會像例子中那樣。在同一個表達式中使用多個遞增/遞減操作時,很容易引入未定義的行爲,因爲您無法期望表達式中的任何內容。詳情請參閱Why are these constructs (using ++) undefined behavior?

0

i++/i--是後增量和變量的遞減...

所以在我們的表達將需要初始值,然後解決增/減1。

int x = 2, y = 3, z = 1; 
y++ + z-- + x++; 
2 + 3 + 1 = 6 
-2
Dim i As Integer = 10 
    Dim b As Integer 
    Dim c As Integer 
    Dim d As Integer 
    b = ++i 
    c = i + 1 
    d = b + c 
    Response.Write("<br/>") 
    Response.Write("The Value of ++i :-" & b) 
    Response.Write("<br/>") 
    Response.Write("The Value of i++ :-" & c) 
    Response.Write("<br/>") 
    Response.Write("Answer is " & d) 

輸出:

The Value of ++i :-10 
The Value of i++ :-11 
Answer is 21 

這就是說 ++ var返回原始值並且 var ++返回增加的值。

+1

這是什麼語言?它看起來不像我見過的任何C++ ... –

0

你也可以實現不同的行爲與while循環:

#include <iostream> 
void main{ 
int count = 0; 
    while (count < 5) 
    { 
    std::cout << "counter is: " << count << std::endl 
    // replace this line with one of the lines below at a time 
    } 
} 

考慮的count

++count // the variable 'count' will grow from 0 to 4 
count++ // ditto, weird as it seems; 'count' grows nonetheless 
count = ++count // the old 'count' becomes 'count + 1' 
count = count++ // endless loop: back to square zero time and time again 

同樣增量下面的表達式,你可以得到一個DO-更深入的瞭解while循環,帶前綴

count = 0; 
do 
{ 
    std::cout << ++count << "\n"; 
} while (count < 5); // prints out 1 to 5 

與後綴

count = 0; 
do 
{ 
    std::cout << count++ << "\n"; 
} while (count < 5); // prints out 0 to 4