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); }
2个回答
展开全部
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
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
展开全部
最后结果:
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询