1
int main()
{
    int var1=4, var2=6;
    var2=var2||var1++&&printf("computer world");
    printf("%d%d",var1,var2); 
    getch();
}

打印出来的答案是 41

问题:
这里不是打印“计算机世界”。根据优先级的顺序,我们必须计算&&逻辑运算符,但这里的行为不是那样的,该语句的值var1应该在该语句之后增加,但不会。我的预期答案是computer world51

4

6 回答 6

6

它被称为“优先级”,而不是“优先级”。优先级与评估顺序不同。

由于||and&&运算符短路,并且 var2 被认为是真(因为 6 非零),因此不会评估后增量操作和函数调用。

于 2013-07-25T05:57:45.813 回答
1

|| _ 运算符检查第一个值是否为true。如果为真,则不会计算逻辑表达式的第二部分,因此 printf 语句没有输出文本。这称为短路操作。

下面的代码给出了预期的结果

#include<stdio.h>

int main()
{
     int  var1=4,var2=0;
     var2=var2||var1++&&printf("computer world");
     printf("%d%d",var1,var2); 
     getch(); //remove getch if you are working on gcc 
}
于 2013-07-25T06:00:03.333 回答
1

var2||var1++&&printf("computer world")将被评估为:

var2||(  var1++&&printf("computer world")   )

因此,由于 var2 不为零,因此后面的所有部分||都将被忽略。

所以结果是真的。这是1,它将被分配给var2。

于 2013-07-25T06:01:28.343 回答
0

如果第||一个操作数的计算结果为 true,则它是一个短路运算符,它不会进一步执行。

所以var2变成 1(因为 var2 最初是 6 并且操作评估为 true)并且没有发生增量,所以var1仍然是 4。

于 2013-07-25T05:57:30.070 回答
0

||是捷径,所以在声明中:

var2=var2||var1++&&printf("computer world");

由于var的值为6,其计算结果为真,因此后一个表达式var1++&&printf("computer world");将不会被执行。

于 2013-07-25T05:58:46.623 回答
0

为了娱乐:

#include"stdio.h"                                                                                                                                                          
   main()
   {
        int  var1=4,var2=6;
        var2=printf("step1")&&var2||printf("step2")||var1++&&printf("step3");
        printf("%d%d\n",var1,var2); 
        var2=printf("step1")&&var2&&printf("step2")||var1++&&printf("step3");
        printf("%d%d\n",var1,var2); 
        var2=printf("step1")&&var2&&printf("step2")&&var1++&&printf("step3");
       printf("%d%d\n",var1,var2);
      // getch();
  }

结果是:

步骤 141

步骤1步骤241

step1step2step351

于 2013-07-25T06:18:35.717 回答