c使用逻辑运算符的程序

时间:2013-07-25 05:53:41

标签: c

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

打印的答案为41

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

6 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分: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 
}

答案 2 :(得分:1)

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

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

因为var2不为零,||之后的所有部分都将被忽略。

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

答案 3 :(得分:0)

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

因此var2变为1(因为var2最初为6且操作的计算结果为真)并且没有增量,所以var1仍为4。

答案 4 :(得分:0)

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

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

由于var的值为6,其值为true,后面的表达式var1++&&printf("computer world");将不会被执行。

答案 5 :(得分: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();
  }

结果是:

step141

step1step241

step1step2step351