C语言中&&和||到底先算哪个?

#include<stdio.h>
void main()
{
int a,b,c,x;
a=b=c=1;
x=++a||++b&&++c;
printf("%d,%d,%d,%d",x,a,b,c);
}
输出的答案是1 2 1 1
c语言教科书后面的附录里写的&&比||的优先级高,网上也是这样说的,但这个程序是从左向右依次运算的。
这不成了&&和||优先级相同了?
求大神解释!!!
优先级和运算顺序有关系吗?

其实计算机是这样算的,他会以||为界将表达式分为两部分,他会先算前一部分,如果前一部分为真,他将停止运算,如果为假,他才会算第二部分,你这里第一部分就为真了,第二部分当然也就不会算了。关于计算机对表达式优先级的判断,如果你学了数据结构中栈的结构和应用你就明白了。不过像这种表达式,最好是手动加上括号,而不是靠计算机来自动识别优先级。像这样的,我的编译器都会警告,我都是会加上括号的,这样就没有警告了。如果不信你可以把&&和它的两个操作数括起来,我相信结果还是这样的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-08
++比||和&&的优先级都要高,如果优先级高就先执行的话,那么||和&&执行之前,全部数字(除了x)都已经是2了哟~
毫无疑问的是a||b&&c是等价于a||(b&&c)的,但对于||来说,即使右边有一个括号,但||还是会先计算左边
第2个回答  2020-04-13
这里出现三个运算符,++>&&>||,所以先算++,a=++a=2,为真,后面就不算了,
&&前面是0时,&&符号后面的不计算.

||前面不是0时,||号后面的不计算.
所以x=1,a=2,b=1,c=1
第3个回答  2013-12-08
目测楼主没搞清楚为毛要从左开始算。。。。。。
建议先看&&和||的定义在说。

这个顺序不是优先级的问题,这是结合顺序的问题。。。。。。。。
第4个回答  2013-12-08
这个要由C的预设||处理方式说明,||只要有一个成立就成立,所以++a后知道是非0就成立了,后面不执行。