免费注册 查看新帖 |

Chinaunix

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

条件操作符?:相关问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-19 21:33 |只看该作者 |倒序浏览
int x, y, z;
x = 1;
y = 2;
z = x > y ? ++x : ++y;

求:
x =  ?
y =  ?
z =  ?


结果小弟知道了,就想请教各位:
?:为第14优先级,结合顺序从右至左,++为第二优先级,结合顺序从右至左。当执行x > y这个表达式时,为什么不是2(++X)跟3(++y)比较呢?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2007-12-20 20:12 |只看该作者
为什么不是2(++X)跟3(++y)比较呢

因为 cond ? a : b 的语意就是先执行 cond, 然后再根据 cond 的结果决定到底是要执行 a 还是 b.

[ 本帖最后由 MMMIX 于 2007-12-20 20:16 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-12-20 21:33 |只看该作者
LZ说的倒是很有道理,MMMIX 也有道理,听谁的搞糊涂了,不过结果只有一个,还有没有更易懂的解释?

论坛徽章:
0
4 [报告]
发表于 2007-12-20 21:51 |只看该作者
x=1
y=3
z=3
结果貌似看不明白

论坛徽章:
0
5 [报告]
发表于 2007-12-20 22:29 |只看该作者
z = x > y ? ++x : ++y;
x=1,y=2,运行到这句就是先比较x y 大小,真的运行前面,假的运行后面,结果是运行++y,到把这个赋值给z

论坛徽章:
0
6 [报告]
发表于 2007-12-21 10:20 |只看该作者
恩,MMMIX 和jordanfang 的解释应该是唯一正确的解释,大家做做实验都能得出这个结论

不过按楼主的说法,++的优先级确实要比?:高,那么应该先结合++x和++y,结合以后才比较。。。。我知道这是错的。。但谁能推翻这个解释,用比较有说服力的方法。我也想知道结果。

论坛徽章:
0
7 [报告]
发表于 2007-12-21 19:30 |只看该作者
找本C语言的书,踏踏实实的看下,这个挺简单的,安他的执行顺序就可以了。

论坛徽章:
0
8 [报告]
发表于 2007-12-23 23:03 |只看该作者
右结合只是编译器在解析计算式的时候的规则吧,并不是运算顺序
其实?是用于优化if else结构的
if(x > y)
    ++x;
else
    ++y;
这样不就很好理解了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP