If statement 带问号的If表达式。如果使用正常的if-else指令,它会转换成什么

If statement 带问号的If表达式。如果使用正常的if-else指令,它会转换成什么,if-statement,logic,If Statement,Logic,我有一个表达式,我知道它是一个if语句…但是它翻译成什么呢? 标志=标志?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

我有一个表达式,我知道它是一个if语句…但是它翻译成什么呢? 标志=标志?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++;
   }

谢谢

这是一个三元表达式

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

意思是如果var是truthy,则将expression1分配给var,否则将expression2分配给var。基本上是这样

if (var)
    var = expression1
else
    var = expression2
因此,在上面的代码中,当计时器==12500时,将重置标志并关闭LED0。

标志=标志?0:1;
表示如果标志为0,则标志为0;如果标志>0,则标志为1。

(标志=标志?0:1)表示如果(标志)则标志为0,否则标志为1。更准确地说,如果标志的值为0,则标志为1,否则所有非零值标志将为0。它在您的代码中的用途是,当计时器达到12500时,标志将变为1,LED将点亮,此后将保持点亮。

Paul,如果答案解决了您的问题,您应该接受答案。