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++ときは、の現在の値を使用してから、値をx1つ増やします。

++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

理由は簡単です。ここでは、演算子の優先順位に従って値を計算する関連付けの原則が使用されています。

X++また、またはX--意味... USE THEN CHANGE ...最初に値を使用し、値をインクリメントまたはデクリメントします。の出力を取得したい場合は7...これを試してください..それはうまくいくかもしれません...

result = ++y + z-- + x++;
于 2012-09-23T10:35:56.793 に答える
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 に答える
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 に答える