int main()
{
int var1=4, var2=6;
var2=var2||var1++&&printf("computer world");
printf("%d%d",var1,var2);
getch();
}
打印的答案为41 。
问题:
这里不打印'计算机世界'。
根据优先级顺序,我们必须计算&&
逻辑运算符,但这里的行为不是那样的,var1
的值应该在该语句之后递增但不会。
我的预期答案是 computer world51
。
答案 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