2

我编写了以下程序,它给了我输出 0 1 但我不明白如何

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

4 回答 4

10

让我们考虑一下:

m = - - i--;

在这里,- -应用一元减号两次。这实际上是一个空操作。因此上面可以简化为

m = i--;

这相当于:

m = i;
i = i - 1;

因此正确的输出是0 1

于 2013-03-29T08:34:00.067 回答
8

-- 和 - - 不同: - - 等于 -(-()) 运算符,当您调用时

m= - - i--; 

您将 i 减 1,然后将新值乘以 -1 两次,这不会改变结果。

于 2013-03-29T08:33:33.283 回答
4

后递增运算符 ( --) 产生 的值i(之后它被否定两次),然后递减它。所以m会是1,i也会是0。

于 2013-03-29T08:33:48.457 回答
2

- -x-- can be write like - (- (x--)).

x-- substract 1 from x, but return x before the substraction. So y will take the value of x. And x is now equals to x - 1.

于 2013-03-29T08:34:13.050 回答