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;
请问是怎么执行的?
能清晰点吗
展开
 我来答
wchyumo2011
2015-06-18 · TA获得超过2万个赞
知道大有可为答主
回答量:5810
采纳率:79%
帮助的人:2708万
展开全部
++在前是先自加一,在后是后自加一,&&的优先级大于||,所以上式可以写为下式:
z = z+1;x=x+1;
(y&&z)||x;
y = y+1;
这样,得到最后整个表达式的值为1,其中一次可得
y = 0, x = 2, z = 3
(0&&3)为0,0||2为1
最后可得结果x=2, y=1, z=3,整个表达式为1
mfjmafanjie
2015-06-18
知道答主
回答量:9
采纳率:0%
帮助的人:9.3万
展开全部
下面这一句是属于判断语句。
由于y++&&++z中y++=1,并且++z=3 ,所以这个为真
由于y++&&++z为真,所以++x不执行,X还是等于1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wang06998
2015-06-18 · TA获得超过5658个赞
知道大有可为答主
回答量:3755
采纳率:83%
帮助的人:2432万
展开全部
先看优先级,++最高,其次&&,最次||
最低的是||,同时||结合性从左向右,也就是说先执行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

===============================分割线
记住,只要是自加自减搭配&&或||,考的必然是短路现象,知道考什么了,再答题就简单了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a1012144015
2015-06-18 · TA获得超过6415个赞
知道大有可为答主
回答量:9038
采纳率:40%
帮助的人:1304万
展开全部
1&&3||2
1||2
2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式