逻辑运算符优先级的问题
#include<stdio.h>main()
{
int a=0,b=0,c=0;
if (++a || ++b && ++c)
printf("%d,%d,%d ", a, b, c);
}
这段代码的结果是1,0,0。但是运算关系里面不是&&大于||吗?为什么不是先算++b&&++c呢,而是先判断++a为非0就判为真呢 因为&&比||优先级高,所以就变成了这样
#include <stdio.h>
int main(void)
{
int a = 0, b = 0, c = 0;
if(++a || (++b && ++c))
printf("%d,%d,%d ", a, b, c);
return 0;
}
短路了,或前面的表达式为真或者与前面的表达式为假,后面的表达式就不会再计算了 "为什么不是先算++b&&++c"
因为“++b&&++c”在运算符||的右边
运算符||从左到右计算 已经说的很清楚了。 人造人 发表于 2019-1-25 18:41
因为&&比||优先级高,所以就变成了这样
这个括号一加我就懂了。谢谢啦!
页:
[1]