出力 0 1 が得られる次のプログラムを作成しましたが、方法がわかりませんでした
main()
{
int i = 1, m = 2;
m= - - i--;
printf("%d %d", i, m);
}
考えてみましょう:
m = - - i--;
ここで- -
は、単項マイナスを 2 回適用します。これは事実上ノーオペレーションです。したがって、上記は次のように簡略化できます
m = i--;
これは次と同等です。
m = i;
i = i - 1;
したがって、正しい出力は0 1
です。
-- と - - は異なります: - - は -(-()) 演算子と同じです。
m= - - i--;
i を 1 減らしてから、新しい値に -1 を 2 回掛けますが、結果は変わりません。
後置インクリメント演算子 ( --
) は (その後、2 回否定されます) の値を生成し、i
それをデクリメントします。1m
になり、i
0 になります。
- -x--
のように書くことができます- (- (x--))
。
x--
x から 1 を減算しますが、減算前に x を返します。したがって、y は x の値を取ります。そして x は に等しくなりましたx - 1
。