main() {int a=10,b=20,c=30,d; d=++a<=10||b-->=20||c++; printf("%d,%d,%d,%d\n",a,b,c,d); }

 我来答
错素琴伏胭
2019-03-18 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.3万
采纳率:34%
帮助的人:893万
展开全部
1、先给你说一下||的执行原理,就是++a<=10||b-->=20||c++这几句话,如果d=++a<=10为真,则后面的都不会执行,++a<=10为假,b-->=20为真,则c++不会执行,如果为假,则c++才执行。
2、a=11;因为++a,自增运算符,++在左边,所以先自增,即10+1=11;
3、b=19;因为++a<=10为假,所以执行第二个条件语句,b--,自减运算符,--在右边,所以先
判断是否b>=20,然后再自减,因为b初值为20,所以条件为真,然后b=20-1=19;
4、c=30;因为我说了第二个条件为真,就不执行第三个条件语句,所以c++不执行,及c仍然为
30;
4、d=1;因为条件语句最后为真,所以为true,则为1
同素芹鄂丁
2019-11-28 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:25%
帮助的人:995万
展开全部
最后结果:
11,19,30,1
原因:
d=++a<=10||b-->=20||c++;
根据优先级加上括号就成了这样
d=(((++a)
<=
10)
||
((b--)>=20))
||
(c++);
首先C的逻辑或运算时有个短路计算的规则,即||左边为真时不会进行右边的计算。
((++a)
<=
10):
++a,+号在左边,先自增再比较,所以
a=11,
11<=10为假,进行b的运算。
((b--)>=20))

b--,减号在右边,先比较再自减,所以比较时b=20,20>=20成立,比较完成后进行b的自减运算,完成时b=19,此时(((++a)
<=
10)
||
((b--)>=20))
的值为真,不再进行c的运算。所以c的值不会变c=30,d为真即d=1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式