如果用问号表达。它用普通的if else指令转换成什么

时间:2013-01-19 21:49:13

标签: if-statement logic

我有这个表达式,我知道这是一个if语句......但它转化为什么? flag = flag?0:1; 是:if(flag == flag)flag = 0 else flag = 1 如果是这种情况,那么当计时器达到12500时,标志将变为1,但它将永远不再变为0。正确?

int flag = 0; 
while(1)
  {
     if (timer == 12500)
       {
          flag = flag?0:1;
          timer=0;
       }

     if(flag == 1)

      p4_0=0; //turn on LED0

    else

      p4_0=1; //turn off LED0

    timer++;
   }

谢谢!

3 个答案:

答案 0 :(得分:1)

这是一个三元表达式

var = var?表达式1:表达式2

表示如果var是真实的,则将expression1分配给var,否则将expression2分配给var。基本上这个。

if (var)
    var = expression1
else
    var = expression2

所以在上面的代码中,当定时器== 12500时,标志将被重置并关闭LED0。

答案 1 :(得分:1)

(flag = flag?0:1)表示if(flag)则flag = 0否则flag = 1.更确切地说,如果flag的值为0,则flag将变为1,否则为非零值标志将变为0.在你的代码中使用的是,一旦定时器达到12500,标志将变为1,LED将打开,此后它将保持为ON。

答案 2 :(得分:0)

flag = flag?0:1; 表示如果flag为0则为零,如果flag> 0,则flag为1。