增量和减量运算符

时间:2014-10-28 14:14:48

标签: c operators decrement

我对这个程序的输出感到困惑:

#include<stdio.h>
int main()
{
    int i=2;
    while(i + 1?--i:14)
        printf("\n%d", i);

    return 0;
}

上述程序的输出是打印1而不打印1然后0

当使用i--代替--i时,它会打印1,然后0

为什么会这样?

  • 为什么在预先制作中它只打印1而不打印0
  • 以及为什么在postdecrementation中打印1然后0

2 个答案:

答案 0 :(得分:5)

这是因为i--导致在执行递减操作之前给出该值。但是,在--i中,我将在使用其值之前减少。

为了更好地理解它: 让我们用你的例子:

 i=2;

案例1:

while(i+1?--i:14)

第一遍:
条件i+1?--i:14将被评估为2+1 ? 1 : 14
这将返回1。循环将被执行,i将包含值1

第二遍:
条件i+1?--i:14将被评估为1+1 ? 0 : 14
这将返回0。因此循环不会被执行,因此您将获得输出1

案例2:

while(i+1?i--:14)

第一遍:
条件i+1?i--:14将被评估为2+1 ? 2-- : 14
这将返回2。循环将被执行,i将包含值1

第二遍:
条件i+1?i--:14将被评估为2+1 ? 1-- : 14
这将返回1。循环将被执行,i将包含值0

在这种情况下,while循环将执行两次。

答案 1 :(得分:2)

让我们按顺序:

  1. i == 2,表示i + 13(且非零如此为真),循环使用--i表示条件减少{{1}到i这是真的,循环运行

  2. 1,这意味着i == 1i + 1(也是如此),循环使用2作为条件,--i减少到i零,这是假的,循环退出。


  3. 另一方面,如果你使用后减法,就像这样:

    1. i == 2,表示i + 13(并且非零如此为真),循环使用i--作为“返回”{的条件{1}}(因为它是“true”运行循环)而然后2减少为i

    2. 1,表示i == 1i + 1(且为真),循环使用2“返回”i--(和因为它是“真”运行循环)然后将1减少到零

    3. i,这意味着i == 0i + 1(和true),循环使用1“返回”零(并结束循环)然后将i--缩减为i