C语言初级问题菜鸟
设x,y,z,均为int变量,则执行下列语句后,x,y,z的值是多少?x=1;y=0;z=2;y++&&++z||++x;请问是怎么执行的?能清晰点吗...
设x,y,z,均为int变量,则执行下列语句后,x,y,z的值是多少?
x=1;y=0;z=2;
y++&&++z||++x;
请问是怎么执行的?
能清晰点吗 展开
x=1;y=0;z=2;
y++&&++z||++x;
请问是怎么执行的?
能清晰点吗 展开
展开全部
下面这一句是属于判断语句。
由于y++&&++z中y++=1,并且++z=3 ,所以这个为真
由于y++&&++z为真,所以++x不执行,X还是等于1
由于y++&&++z中y++=1,并且++z=3 ,所以这个为真
由于y++&&++z为真,所以++x不执行,X还是等于1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先看优先级,++最高,其次&&,最次||
最低的是||,同时||结合性从左向右,也就是说先执行y++&&++z,再执行++x,最后做||
对于y++&&++z,&&结合性自左向右,先执行y++,再执行++z,最后&&
y++,先使用后+1,所以y++返回值是0,但y的值变成1
由于是逻辑与&&左边为0,最终结果不管右侧取值多少,最终结果必然位假(0),所以右侧短路不予执行,也就是说,++z压根就没执行过,z的值不变。
以上,能确认y++&&++z返回值为0
=================================分割线
现在,y++&&++z||++x已经推演得到是0||++x的形式了
||结合性自左向右,先判断左边的0,再执行右侧++x,最后||
因为左侧为0,最终结果需要跟右侧计算了,所以右侧没有短路,需要计算++x
++x,先+1后使用,x先变成2,然后再把x的值返回,也就是说++x返回值为2
此刻,演变得到0||2,结果为1,也就是整个表达式返回值为1。
再回头看三个变量,y是1,z的值不变是2,x变成了2
===============================分割线
记住,只要是自加自减搭配&&或||,考的必然是短路现象,知道考什么了,再答题就简单了
最低的是||,同时||结合性从左向右,也就是说先执行y++&&++z,再执行++x,最后做||
对于y++&&++z,&&结合性自左向右,先执行y++,再执行++z,最后&&
y++,先使用后+1,所以y++返回值是0,但y的值变成1
由于是逻辑与&&左边为0,最终结果不管右侧取值多少,最终结果必然位假(0),所以右侧短路不予执行,也就是说,++z压根就没执行过,z的值不变。
以上,能确认y++&&++z返回值为0
=================================分割线
现在,y++&&++z||++x已经推演得到是0||++x的形式了
||结合性自左向右,先判断左边的0,再执行右侧++x,最后||
因为左侧为0,最终结果需要跟右侧计算了,所以右侧没有短路,需要计算++x
++x,先+1后使用,x先变成2,然后再把x的值返回,也就是说++x返回值为2
此刻,演变得到0||2,结果为1,也就是整个表达式返回值为1。
再回头看三个变量,y是1,z的值不变是2,x变成了2
===============================分割线
记住,只要是自加自减搭配&&或||,考的必然是短路现象,知道考什么了,再答题就简单了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1&&3||2
1||2
2
1||2
2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询