免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: GAZAG
打印 上一主题 下一主题

这句话是什么意思? [复制链接]

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
11 [报告]
发表于 2011-12-27 13:31 |只看该作者
回复 8# hbmhalley

标准到头来也只以“不确定”了事。

论坛徽章:
0
12 [报告]
发表于 2011-12-27 13:39 |只看该作者
操作符的优先级。

论坛徽章:
0
13 [报告]
发表于 2011-12-27 14:17 |只看该作者
本帖最后由 GAZAG 于 2011-12-27 14:21 编辑

int  i=1;
i=i++ ;
根据操作符的优先级,表达式的求值顺序应该是:先计算i++ ,再计算i=i,对不对?
(1)i++ 是有副作用的表达式,它的求值结果是:2。副作用是:1。
(2)i=i这个表达式的右值i,是用(1)表达式的那个值?2还是1?

论坛徽章:
0
14 [报告]
发表于 2011-12-27 14:26 |只看该作者
回复 13# GAZAG


    谁规定在1*2+3*4里一定要先算1*2再算3*4了?

论坛徽章:
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
15 [报告]
发表于 2011-12-27 14:47 |只看该作者
GAZAG 发表于 2011-12-27 14:17
int  i=1;
i=i++ ;
根据操作符的优先级,表达式的求值顺序应该是:先计算i++ ,再计算i=i,对不对?

不对,你混淆了两个概念:表达式求值和副作用生效的时间。你的所谓“计算”假设了它们是同时的,其实并不是这样。i=i++ 这个表达式结果不确定的原因在于 i++ 有副作用,它的值是确定的,但是它的副作用何时生效却是不确定的。

论坛徽章:
0
16 [报告]
发表于 2011-12-27 14:55 |只看该作者
本帖最后由 GAZAG 于 2011-12-27 15:04 编辑
hbmhalley 发表于 2011-12-27 14:26
回复 13# GAZAG

    回复13#GAZAG    谁规定在1*2+3*4里一定要先算1*2再算3*4了?
------------------
    你是意思是,同优先级的子表达式,如果有两个或以上,(1)1*2,(2)3*4。它们的计算顺序不确定?
   

论坛徽章:
0
17 [报告]
发表于 2011-12-27 15:05 |只看该作者
回复 16# GAZAG


    优先级指运算的结合顺序
    就是说 1*2+3*4 等价于((1*2)+(3*4))

    '='作为一个运算符,有它自己的运算规则,就是将右边的值赋到左边的地址里
    仅此而以
    没有规定先处理哪边
    i=i++当然不是先算i=i
    但a[++i]=i++却没规定先算++i还是i++

论坛徽章:
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
18 [报告]
发表于 2011-12-27 15:15 |只看该作者
GAZAG 发表于 2011-12-27 14:55
回复13#GAZAG    谁规定在1*2+3*4里一定要先算1*2再算3*4了?
------------------
     你是意思是,同优先级的子表达式,如果有两个或以上,(1)1*2,(2)3*4。它们的计算顺序不确定?


没错。

论坛徽章:
0
19 [报告]
发表于 2011-12-27 15:19 |只看该作者
本帖最后由 GAZAG 于 2011-12-27 15:26 编辑

i=i++;
这个表达式语句,它的操作符的优先级是++,=。先计算i++,再计算i=i。

a[++i]=i++;
这个表达式语句,它的操作符的优先级是++ ,=。先计算a[++i],i++  。因为它们是同一级优先级。不过,计算那个先,那个后,计算机是不确定,对不对?

论坛徽章:
0
20 [报告]
发表于 2011-12-27 15:34 |只看该作者
楼上各位:
   13楼的问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP