-1
#include <stdio.h>

int main()
{
  int x = 4, y, z;
  y = --x;
  z = x--;
  printf("%d %d %d", x, y, z);
}

出力:2 3 3

誰かがこれを説明できますか?
そして、どういうi =+ j意味ですか(と仮定i = 1してj = 2)?

4

12 に答える 12

9

y = --x「x を 1 減らし、結果を y に格納する」ことを意味します。

z = x--「x の一時値を保存します。x を 1 減らします。一時値を z に格納します」

したがって:

  • x は 4 から始まります。
  • 1 減ります (3 に)。yには3が格納されます。
  • x は一時的に保存されます。x が再び減少します (2 に)。次に、temp (3) が z に格納されます。
  • y と z は 3 として出力され、x は 2 として出力されます。
于 2010-10-08T13:57:18.377 に答える
6

後置デクリメント演算子 (x--) は、デクリメントされる前の変数の値を返します。

  • x = 2 です。これは、2 回デクリメントしたためです。
  • y = 3。4 から減分されたに x の値に代入したためです。
  • z = 3 は、 3 からデクリメントされる前に x の値に代入したためです 。
于 2010-10-08T13:56:28.647 に答える
3

後減分演算子と前減分演算子の概念を理解する必要があります。

どちらも変数を減分しますが、一方は元の値を返し ( x--)、もう一方は減分された値を返します ( --x)。

于 2010-10-08T13:56:44.840 に答える
3

簡単な説明:

--x または ++x : 値は後で変更されます。

x-- または x++ : 値は前に変更されます

詳細な説明:

--x または ++x : pre-decrement/increment:最初にデクリメントまたはインクリメントの操作を行い、次に x を割り当てます。

x-- または x++ : post:decrement/increment : 最初に x の値を割り当ててから、デクリメントまたはインクリメントの操作を行います。

コードをより適切な形式で記述し、コードを段階的に見て、何が起こるかを視覚的に示すために注釈を付けます。

main() {
    //We declare the variables x, y and z, only x is given a value of 4.
    int x=4,y,z;

    //--x will decrement var x by 1 first THEN it will assign the value of x to y.
    //so: x = 3, y = 3 and z = nothing yet.
    y = --x;

    //x-- will assign the value of x to z first, then var x will be decremented by 1 after.
    //so: x = 2, y=3 and z = 3
    z = x--; 

    printf ("\n %d %d %d", x,y,z);

}
于 2010-10-08T14:09:33.580 に答える
0
#include<stdio.h>
main ()
{
int x=4,y,z;
y = --x;
z = x--;
printf ("\n %d %d %d", x,y,z);
}

出力2,3,3.................................初めてx=4で問題ありません。y =-xは、xの値が1だけデクリメントされ、yに格納されることを意味します。したがって、y = 3であり、xも3になります。z= x--は、xの値がz(z = 3)に格納されることを意味します。次に、xがデクリメントされます。つまり、x = 2ですが、z=3になります。値を出力すると、printf()は233を出力します。

于 2010-10-09T09:08:42.207 に答える
0

はい:

x = 4
y = pre-decrement x(基本的に1ずつデクリメントしてから割り当てます。つまりy = x-1 = 3
x = 3
z = post-decrement x(値を割り当てたに1ずつ減らします。つまりz = x = 3 、次にx = x-1
x = 2

したがって、x = 2、y = 3、z = 3、まさにあなたが見たものです。

于 2010-10-08T13:57:38.397 に答える
0

演算子が接頭辞の場合、インクリメントは代入の前に発生します。演算子が接尾辞の場合、インクリメントは代入の後に発生します。

于 2010-10-08T13:59:38.720 に答える
0

**インクリメント/デクリメント演算子とします。結果を適用て評価する**eことを意味しますが、結果を評価してから適用することを意味ます。**ee**e**

エルゴ、デクリメントと評価が分離されている場合、コードは次のようになります。

int x=4,y,z;
x-=1;//3
y = x;//3
z = x;//3
x-=1;//2

それはあなたが持っている出力をあなたに与えます;)

于 2010-10-08T13:59:42.070 に答える
0
y = --x;

X がデクリメントされ、Y に X の値が代入されます (3)

z = x--;

Z には X の値が代入され (3)、X はデクリメントされます (2)

于 2010-10-08T13:57:26.540 に答える
0

後置デクリメント (x--) は、前置デクリメント (--x) とは異なります。前者は値 x を返し、それをデクリメントします。後者はデクリメントしてから値を返します。

そして、後置が低レベルでどのように書かれているかを考えると、前置よりも少し遅いことがわかります... :)

于 2010-10-08T13:57:16.840 に答える
0

どういう意味かについて話すi=+j;(i=1 と j=2 の場合)

i=+j;i=i+j;あなたの式はi=1+2ieになりますi=3

于 2013-07-24T07:30:10.643 に答える
0
  • x++ / x--ポストインクリメント/デクリメントと呼ばれます (値は後に変更されます...)
  • ++x / ++xプレインクリメント / デクリメントと呼ばれます (値は以前に変更されました...)

あなたの例で(大まかに)何が起こるかは次のとおりです。

int x=4,y,z;  // declare x=4, y=0, z=0
y = --x;      // decrement x then assign it to y (pre decrement) (y=x=3)
z = x--;      // assign x to z then decrement x (post decrement) (z=3 and x=2)
printf ("\n %d %d %d", x,y,z);  // output 2 3 3

前のインクリメント/デクリメントは擬似コードで次のようになります

read value
increment/decrement value
write value
assign value

ポストのインクリメント/デクリメントは次のようになります

read value
assign value
increment/decrement value
write value
于 2010-10-08T14:07:32.660 に答える