免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1895 | 回复: 4
打印 上一主题 下一主题

关于与或短路判断的一个疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-21 10:22 |只看该作者 |倒序浏览
这个自己看书时看到的一个题:

i = 1; j = 1; k = 1;

++i || ++j && ++k;

之后i,j,k的值是多少?

我本来以为&&优先级高于||,所以先计算++j得2,再计算++k得2,整个&&表达式得1;随后是++i得2,于是短路判断||之后表达式值为1;最后i,j,k应该是2,2,2。
也就是上式同等于((++i) || ((++j) && (++k)));
但编译过后显示的是2,1,1;是我哪里理解错了么?是否是||在++i得2短路判断之后不再计算右边的&&判断式?但&&的优先级较高,应该是在||之前就已经++j和++k了阿?

新手迷惑之中,恳请赐教。

论坛徽章:
0
2 [报告]
发表于 2009-02-21 13:56 |只看该作者
原帖由 niexinnm 于 2009-2-20 18:22 发表
这个自己看书时看到的一个题:

i = 1; j = 1; k = 1;

++i || ++j && ++k;

之后i,j,k的值是多少?

我本来以为&&优先级高于||,所以先计算++j得2,再计算++k得2,整个&&表达式得1;随后是++i得2,于 ...


短路运算符参数都是自左向右的顺序evaluate的。
优先级是说参数怎么结合。
&&优先级比||高,因此原式要结合成 (a) || (b && c) 而不是 (a || b) && c.

评分

参与人数 1可用积分 +4 收起 理由
samon_fu + 4 我很赞同

查看全部评分

论坛徽章:
0
3 [报告]
发表于 2009-02-21 22:13 |只看该作者
不要写这样的代码,好好加括号

论坛徽章:
0
4 [报告]
发表于 2009-02-21 23:01 |只看该作者
嗯,记不稳优先级就加括号,也方便记不住它的人阅读你的代码

论坛徽章:
0
5 [报告]
发表于 2009-02-22 11:27 |只看该作者
多谢各位,其实我也很想加上括号就搞定,只是这个题目就是这样,我想他大概是想我学习的时候理解到短路判断的思想吧。

再次感谢~ 特别是emacsnw^____________________^
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP