c中的三元运算符优先级

时间:2014-02-19 22:16:38

标签: c output ternary-operator

在下面的代码中,输出为1,但应为2。怎么样?

#include<stdio.h>

int main()
{
        int count=0,i;
        int num[4]={1,2,3,4};

        for(i=0;i<4;++i)
            count = count+(num[i]%2==1)?1:0;

        printf("%d",count);
        return 0;
}

2 个答案:

答案 0 :(得分:3)

运营商优先权。将行更改为:

    count = count + ((num[i] % 2 == 1) ? 1 : 0);

或者,甚至更好:

    count += num[i] % 2;

要说明:+的优先级高于?:。所以你的直线实际上被解释为:

    count = (count + (num[i] % 2 == 1)) ? 1 : 0;

因此,在循环的每次迭代中,count被设置为10,如下所示:

  i   |  count  |  (num[i] % 2 == 1)  | count + (num...)  |  new count
------+---------+---------------------+-------------------+-------------
  0   |    0    |      1 (true)       |      1            |    1    
  1   |    1    |      0 (false)      |      1            |    1
  2   |    1    |      1 (true)       |      2            |    1             
  3   |    1    |      0 (false)      |      1            |    1

答案 1 :(得分:0)

变化:

 count = count+(num[i]%2==1)?1:0;

count = count+((num[i]%2==1)?1:0);

+二元运算符的优先级高于条件运算符。

相关问题