如果声明无法理解

0 c if-statement

我下周将参加一个C大学考试,我正在查看旧的考试试卷,其中一个问题给出了这个零散的代码.

int a=2, b=-1, c=0;

   if (a-2||b&&c||a){

     printf("True\n");

   } else {

     printf("False\n");

   }
Run Code Online (Sandbox Code Playgroud)

我们必须确定这段代码的输出是什么,但if语句对我来说没有任何意义,如果我遇到的语句非常具体,就像说

if( x == 0)
Run Code Online (Sandbox Code Playgroud)

我不知道这是在寻找我唯一的假设是它将永远是真的.我是对的还是还有更多呢?

glg*_*lgl 12

这项任务有两个目标:

  • 显示C中的布尔值:基本上它们使用false映射计算为0,并将true映射为1.反过来,任何数值或指针值都可以在整数上下文中使用,具有相应的零值(0,0.0, NULL(指针),0.0f,0L等)评估为false,其他所有为true.
  • 显示运营商的优先顺序

&&具有更高的优先级||,所以这个陈述相当于

a-2 || (b&&c) || a
Run Code Online (Sandbox Code Playgroud)

true如果任何值为真,它将评估.

因为a==2,a-20 c是0,所以b && c也是0.

所以我们有0 || 0 || a,这a是2 ,这是真的.