问答题 什么是短路求值
【正确答案】
【答案解析】短路求值是常见的计算机问题,所为短路求值即对于(条件1&&条件2),如果“条件1”是false,那“条件2”的表达式会被忽略。对于(条件1 ‖条件2),如果“条件1”为true,而“条件2”的表达式则被忽略了。
程序示例如下:
#include<stdio.h>
int main()
{
int i=6,j=1;
if(i>0‖(j++)>0)
;
printf("%d/n",j);
return 0;
}
程序输出结果:
1
输出为什么不是2而是1呢?其实,这里就涉及一个短路计算的问题。由于if语句是一个条件判断语句,里面是有两个简单语句进行或运算组合的复合语句,因为或运算中,只要参与或运算的两个表达式的值都为真,则整个运算结果为真,而由于变量i的值为6,已经大于0了,而该语句已经为true,则不需要执行后续的j++操作来判断真假,所以后续的j++操作不执行,j的值仍然为1。
程序示例如下:
#include<stdio.h>
int main()
{
int a=5,b=6,c=7,d=8,m=2,n=2;
(m=a>b)&&(n=c>d);
printf("%d/n",n);
return 0;
}
程序的输出结果:
2
因为短路计算的问题,对于&&操作,由于两个表达式的值如果有一个为假,则整个表达式的值都为假,如果前一个语句的返回值为false,则无论后一个语句是真是假,整个条件判断都为假。不用执行后一个语句,而a>b为false,程序不执行n=c>d,所以n的值保持为初值2。