| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1065 人关注过本帖
标题:一道C语言结果结果问题
只看楼主 加入收藏
solonight
Rank: 2
等 级:论坛游民
帖 子:28
专家分:17
注 册:2009-10-3
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:12 
一道C语言结果结果问题
int x=4,w=5,y,z;
y=w++*w++*w++;
z=--x*--x*--x;

书上的哈

X自减3次不应该是1么,  那么三个1相乘应该是一呀

麻烦给本菜鸟讲解下,先谢谢了哈``




恩?,可是我用turboc
编绎的好像是   4?




恩 谢谢  Kid_X   虽然看的不是很懂哈``
膜拜

[ 本帖最后由 solonight 于 2009-11-5 10:29 编辑 ]
搜索更多相关主题的帖子: 结果 C语言 
2009-11-04 16:53
whys
Rank: 1
等 级:新手上路
帖 子:50
专家分:8
注 册:2009-10-27
收藏
得分:0 
是1,是像你说的那样。

[ 本帖最后由 whys 于 2009-11-4 17:05 编辑 ]
2009-11-04 17:04
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
y为125
z为1(自减前缀且优先于*)

我可好玩啦...不信你玩玩^_^
2009-11-04 17:04
solonight
Rank: 2
等 级:论坛游民
帖 子:28
专家分:17
注 册:2009-10-3
收藏
得分:0 
恩?,可是我用turboc
编绎的好像是   4?
2009-11-04 17:30
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
x是4

我可好玩啦...不信你玩玩^_^
2009-11-04 17:34
lihengming
Rank: 1
来 自:湖北武汉
等 级:新手上路
帖 子:29
专家分:2
注 册:2009-3-8
收藏
得分:0 
估计是你输出的是X ,       Y:  125   Z:   1
2009-11-04 18:03
Kid_X
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:216
专家分:515
注 册:2007-10-8
收藏
得分:20 
经测试,vc6和gcc的结果z都是4。
它是这样算出来的,首先是算第一个乘号,它的两个操作数都有--运算,所以先做两个减减,x=2,所以第一个乘号的结果是4,之后第二个乘号,后面的操作数有--,先做--,x=1,所以最后是 4*1=4;整个过程是2*2*1;这个根据反汇编代码推出来的。
虽然--的优先级高于*,但是语法树分析应该是依次扫描的。
此外,c语言的变量都存放在内存中。在VC6下查看汇编代码,没经过优化的,发现如下:
6:        z=--x*--x*--x;
0040105F   mov         ecx,dword ptr [ebp-4]    ;dword ptr [ebp-4]就是变量x
00401062   sub         ecx,1
00401065   mov         dword ptr [ebp-4],ecx
00401068   mov         edx,dword ptr [ebp-4]
0040106B   sub         edx,1
0040106E   mov         dword ptr [ebp-4],edx
00401071   mov         eax,dword ptr [ebp-4]
00401074   imul        eax,dword ptr [ebp-4]
00401078   mov         ecx,dword ptr [ebp-4]
0040107B   sub         ecx,1
0040107E   mov         dword ptr [ebp-4],ecx
00401081   imul        eax,dword ptr [ebp-4]
00401085   mov         dword ptr [ebp-10h],eax

所以,虽然--的优先级高于*,但他不是全部--做完再做乘运算。
当然,这牵涉到编译原理,以及语法分析等相关问题。由于没学过编译原理,就不多说了。
2009-11-04 18:30
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
回复 7楼 Kid_X
测试的code看看

我可好玩啦...不信你玩玩^_^
2009-11-04 18:35
Kid_X
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:216
专家分:515
注 册:2007-10-8
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册


另外,这种题两三年前这论坛里就一直在讨论。

[ 本帖最后由 Kid_X 于 2009-11-4 18:46 编辑 ]
2009-11-04 18:44
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
回复 9楼 Kid_X
GCC下确实是4,tc和win-tc却是1.编译器所采用的标准不一样吧。

我可好玩啦...不信你玩玩^_^
2009-11-04 18:59
快速回复:一道C语言结果结果问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013428 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved