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;
}
4

10 回答 10

10

因为后缀operator++在递增变量之前返回原始值。前缀operator++增加 varialbe 并返回对它的引用。可以通过一个示例轻松说明该行为:

#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
}
于 2012-09-23T10:32:43.337 回答
6
 result = y++ + z-- + x++;
           3     1      2  = 6

如果您再次执行此操作

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

原因

operator++在递增变量之前返回原始值。

++operator返回增加的值

--和上面一样只是它的减量

于 2012-09-23T10:35:36.770 回答
5

当您编写x++它时,它使用当前值,x然后将其增加一。

++x如果你想先增加,你想写。

于 2012-09-23T10:32:48.513 回答
3

Pre-increment operator(++p)首先增加值并分配它,post increment operator(p++)首先分配值然后执行增量操作。这里所有变量都是后增量,即它最初分配它的值(在缓冲区上)然后增加(对于 y 和 x 增加 1)并减少 z 减少 1。即最初在缓冲区中分配3 + 1 + 2(对缓冲区值执行加法),然后执行增量/减量,如x = 3,y = 4和z = 0

有关更多信息,您可以阅读关于 cout << c++ << c; 的正确答案是什么?为什么这些构造(使用++)是未定义的行为?问题

于 2012-09-23T10:36:46.460 回答
2

物质的位置++

如果++在变量之前,例如++counter,返回的值是计数器增加后的值。如果++跟在变量后面,例如counter++,返回的值是计数器增加之前的值。

(资源)

于 2012-09-23T10:34:08.097 回答
1

Postincrement/postdecrement 将递增/递减变量,但计算为变量“上一个”值。

所以表达式的result = y++ + z-- + x++行为类似于:

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

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

但是,请记住,这必然是编译器执行评估的严格方式。对于此表达式,结果定义明确,您最终将与示例中的一样。在同一个表达式中使用多个递增/递减操作时,很容易合并未定义的行为,您将无法从表达式中期待任何特别的东西。请参阅为什么这些构造(使用 ++)未定义行为?详情。

于 2012-09-23T10:36:49.483 回答
1

原因很简单。这里使用了关联原则,它根据运算符的优先级计算值。

ALSOX++X--表示... USE THEN CHANGE... 它将首先使用该值并增加或减少它。如果您想获得7...的输出,请尝试此..它可能会起作用...

result = ++y + z-- + x++;
于 2012-09-23T10:35:56.793 回答
0

i++/i--是变量的后增量和减量...

所以在我们的表达式中,它将采用初始值来求解然后 inc/dec 乘以 1。

int x = 2, y = 3, z = 1;
y++ + z-- + x++;
2   + 3   + 1    = 6
于 2014-06-07T06:33:51.560 回答
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
于 2017-03-20T19:50:20.983 回答
-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++ 返回递增值。

于 2017-02-16T12:53:23.457 回答