2

出力 0 1 が得られる次のプログラムを作成しましたが、方法がわかりませんでした

main()
{
  int i = 1, m = 2;
  m= - - i--;
  printf("%d %d", i, m);
}
4

4 に答える 4

10

考えてみましょう:

m = - - i--;

ここで- -は、単項マイナスを 2 回適用します。これは事実上ノーオペレーションです。したがって、上記は次のように簡略化できます

m = i--;

これは次と同等です。

m = i;
i = i - 1;

したがって、正しい出力は0 1です。

于 2013-03-29T08:34:00.067 に答える
8

-- と - - は異なります: - - は -(-()) 演算子と同じです。

m= - - i--; 

i を 1 減らしてから、新しい値に -1 を 2 回掛けますが、結果は変わりません。

于 2013-03-29T08:33:33.283 に答える
4

後置インクリメント演算子 ( --) は (その後、2 回否定されます) の値を生成し、iそれをデクリメントします。1mになり、i0 になります。

于 2013-03-29T08:33:48.457 に答える
2

- -x--のように書くことができます- (- (x--))

x--x から 1 を減算しますが、減算前に x を返します。したがって、y は x の値を取ります。そして x は に等しくなりましたx - 1

于 2013-03-29T08:34:13.050 に答える