C语言关于||和&&的问题。

#include<stdio.h>voidmain(){inta,b,c,w=1,x=2,y=3,z=4,d=5,e=6;a=b=c=1;++a||++b&&++c;(d... #include<stdio.h>
void main()
{ int a,b,c,w=1,x=2,y=3,z=4,d=5,e=6;
a=b=c=1;
++a||++b&&++c;
(d=w>x)&&(e=y>z);
printf("a=%d,b=%d,c=%d,d=%d,e=%d",a,b,c,d,e);
}
测试出来a为2.b=c=1.
但是++a||++b&&++c; ||的优先级不是比&&低吗?
那么可以看成++a||(++b&&++c).
显然括号优先级又大于||。。。怎么b.c还是等于1呢。。
展开
 我来答
wangnasa
2012-09-24 · TA获得超过776个赞
知道小有建树答主
回答量:732
采纳率:100%
帮助的人:637万
展开全部
&& 和 || 有短路效应
就是
(++b&&++c). 当++b==0时 ++c就不用判断了所以 &&运算短路 ++c没有执行

当++a||(++b&&++c). 当++a 非0 ||运算短路 (++b&&++c).无需运算被跳过
所以结论 只有++a被执行
其余运算被跳过
追问
是啊。。
但是括号优先级比||高。。
难道不是先算括号吗。。
追答
是&&的优先级高
但短路的优先级更高
编译器会从最外层(正好是跟运算优先级反着的)也就是最后运算的那个表达式开始判断短路 如果最外层短路了
里面优先级再高都不会运算
匿名用户
2012-09-24
展开全部
||的优先级和&&的优先级是一样的,就像数学上的“+”和“-”一样 。我试过了,运行结果为:a=2,b=1,c=1,d=0,e=6 Press any key to continue.原因如下:首先说++a||++b&&++c;——逻辑或是一真即真,++a可执行,即为真,后面的就不用执行了(也就是|++b&&++c不执行),所以b=1,c=1;同理,语句(d=w>x)&&(e=y>z);中,逻辑与(&&)的运算法则是一假即假,(d=w>x)的结果是0,为假,所以&&后面的也不用算了,d=0,e=6(没变)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kangfu008
2012-09-24 · TA获得超过149个赞
知道答主
回答量:175
采纳率:66%
帮助的人:54.1万
展开全部
应该没有优先吧,一直没有注意!!看看书!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式