#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
)?
y = --x
「x を 1 減らし、結果を y に格納する」ことを意味します。
z = x--
「x の一時値を保存します。x を 1 減らします。一時値を z に格納します」
したがって:
後置デクリメント演算子 (x--) は、デクリメントされる前の変数の値を返します。
後減分演算子と前減分演算子の概念を理解する必要があります。
どちらも変数を減分しますが、一方は元の値を返し ( x--
)、もう一方は減分された値を返します ( --x
)。
簡単な説明:
--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);
}
#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を出力します。
はい:
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、まさにあなたが見たものです。
演算子が接頭辞の場合、インクリメントは代入の前に発生します。演算子が接尾辞の場合、インクリメントは代入の後に発生します。
**
インクリメント/デクリメント演算子とします。結果を適用して評価する**e
ことを意味しますが、結果を評価してから適用することを意味します。**
e
e**
e
**
エルゴ、デクリメントと評価が分離されている場合、コードは次のようになります。
int x=4,y,z;
x-=1;//3
y = x;//3
z = x;//3
x-=1;//2
それはあなたが持っている出力をあなたに与えます;)
y = --x;
X がデクリメントされ、Y に X の値が代入されます (3)
z = x--;
Z には X の値が代入され (3)、X はデクリメントされます (2)
後置デクリメント (x--) は、前置デクリメント (--x) とは異なります。前者は値 x を返し、それをデクリメントします。後者はデクリメントしてから値を返します。
そして、後置が低レベルでどのように書かれているかを考えると、前置よりも少し遅いことがわかります... :)
どういう意味かについて話すi=+j;
(i=1 と j=2 の場合)
i=+j;
i=i+j;
あなたの式はi=1+2
ieになりますi=3
あなたの例で(大まかに)何が起こるかは次のとおりです。
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