-4

デクリメント演算子--の実行時に値が 1 減らないのはなぜですか?

int a = 20;
int c ;

c = a--;

今の値を調べると、c19 になるはずですが、20 になっています。何が欠けていますか?

4

4 に答える 4

1

a----aPre-Decrementが必要なのは Post-Decrementです。ウィキのインクリメント演算子とデクリメント演算子を読んでください

次の C コード フラグメントは、前後のインクリメント演算子とデクリメント演算子の違いを示しています。

int  x;
int  y;

// Increment operators
x = 1;
y = ++x;    
// x is now 2, y is also 2
y = x++;
// x is now 3, y is 2

// Decrement operators
x = 3;
y = x--;    
// x is now 2, y is 3
y = --x;    
// x is now 1, y is also 1
于 2014-12-30T12:12:44.897 に答える
0

postfix使用しているものは演算子と呼ばれます。=代入演算子が既存の値で実行を終了した後、実行されます [値を減らす] 。

明確にするために、ポストデクリメントの場合、..--演算子が評価され、そのオペランドを含む他の評価が終了すると、デクリメントがスケジュールされます。つまり、オペランドの既存の値が他の評価[in =] で使用され、値が減少します。

必要に応じて、aそれ自体の値を出力してみてください。減分された値を出力します。


編集:

私の回答での言葉の選択が混乱を引き起こした場合、参考までに、c99標準の第6.5.2.4章[私の強調]

[インクリメントの場合] 後置 ++ 演算子の結果はオペランドの値になります。結果が得られた後、オペランドの値がインクリメントされます [......]

後置 -- 演算子は後置 ++ 演算子に似ていますが、オペランドの値がデクリメントされる (つまり、適切な型の値 1 がそこから減算される) 点が異なります。

于 2014-12-30T12:14:00.587 に答える
0

--a (デクリメント前の演算子) を使用する必要があります。デクリメント後の演算子 a-- を使用しています。

後置 -- 演算子の結果は、オペランドの値です。副作用として、オペランド オブジェクトの値が減分されます (つまり、適切な型の値 1 が減算されます)。

于 2014-12-30T12:14:04.750 に答える
0

ポストデクリメントを使用しています。ポストデクリメントとは、最初に変数または何かの値を使用してから、変数の値をデクリメントすることを意味します。したがって、この場合、 の最初の値はaに割り当てられcます。そしてデクリメントが行われます。の値を印刷して確認できますa

于 2014-12-30T12:18:16.537 に答える