问题:
观察运行结果,不理解b和c的值为什么是1
#include<stdio.h>
int main()
{
int a,b,c;
a=b=c=1;
a--||b--&&--c;
printf("%d,%d,%d
",a,b,c);
return 0;
}
运行结果:
结果分析:
&&的截断:
&&的截断在0,如命题A,B。A&&B,如果A为0,则表达式必为0,后面截断不看,计算也不再运行。
||的截断:
||的截断在于非0,如命题A,B。A||B,如果A为非0,则表达式必为1,后面截断不看计算也不再运行。
该截断内容引自其他博主
个人理解(参考自百度):
&&的优先级高于||,但运算符的优先级与系统进行表达式运算的顺序没有必然的关系,比如表达式A||B&&C,由于&&优先级高于||,所以等效于A||(B&&C),但是系统会先对表达式中的A进行判断,若A的值为非零值(真),则由于逻辑运算符的短路效应,后面的表达式B&&C就不再判断;反之则继续进行表达式B&&C的判断