| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1204 人关注过本帖
标题:是VC编译器的问题吗
只看楼主 加入收藏
ginowang11
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-9-8
收藏
 问题点数:0 回复次数:14 
是VC编译器的问题吗
int a=5;
b=++a*--a   结果是25?
int a=5,j,k;
b=(j=++a)*--a   结果是30?
int a=5;
b=++a*a          结果是36?
int a=5;
b=(a-0)*++a;  36 ????
int a=5;
b=(a-1)*++a    24 ???
搜索更多相关主题的帖子: 编译 
2008-09-08 22:39
snakealpha
Rank: 1
来 自:扬州
等 级:新手上路
威 望:1
帖 子:267
专家分:0
注 册:2005-11-5
收藏
得分:0 
在VS2008中,最后一条b为30,其余一致
...确实有点糊涂,++和--的优先级和*是一样的,那大概就是结合性的问题了吧?...

天涯也有江南信
梅破知春近
夜阑风细得香迟
不道晓来开遍向南枝
2008-09-08 22:53
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
不知道是哪本书上说的了,就是在提到这种刁难人的++--的语法的时候写的:“世界上还有许多更有意义的事情值得我们去消耗摄入的食物。”
2008-09-08 23:35
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
这道题难度很大   我是不太确定答案的
请你不要在重复发帖

相信有人会帮你解决的

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-09-08 23:38
Syunxiacc
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-7-30
收藏
得分:0 
int a=5;
b=++a*--a;

执行步骤:
1: ++a        //a=6
2: --a        //a=5
3: a*a        //b=25

反汇编代码:
mov         eax,dword ptr [a]
add         eax,1
mov         dword ptr [a],eax
mov         ecx,dword ptr [a]
sub         ecx,1
mov         dword ptr [a],ecx
mov         edx,dword ptr [a]
imul        edx,dword ptr [a]
mov         dword ptr [b],edx

int a=5,j,k;
b=(j=++a)*--a;

1: ++a        //a=6
2: j=a        //j=a=6
3: --a        //a=5
4: b=j*a      //b=30

mov         eax,dword ptr [a]
add         eax,1
mov         dword ptr [a],eax
mov         ecx,dword ptr [a]
mov         dword ptr [j],ecx
mov         edx,dword ptr [a]
sub         edx,1
mov         dword ptr [a],edx
mov         eax,dword ptr [j]
imul        eax,dword ptr [a]
mov         dword ptr [b],eax

int a=5;
b=++a*a;

1: ++a        //a=6
2: b=a*a      //b=36

mov         eax,dword ptr [a]
add         eax,1
mov         dword ptr [a],eax
mov         ecx,dword ptr [a]
imul        ecx,dword ptr [a]
mov         dword ptr [b],ecx

int a=5;
b=(a-0)*++a;

1: ++a            //a=6
2: Temp=a-0       //Temp=6
3: b=Temp*a       //b=36

mov         eax,dword ptr [a]
add         eax,1
mov         dword ptr [a],eax
mov         ecx,dword ptr [a]
imul        ecx,dword ptr [a]
mov         dword ptr [b],ecx

int a=5;
b=(a-1)*++a

1: ++a            //a=6
2: Temp=a-1       //Temp=5
3: b=Temp*a       //b=30

mov         eax,dword ptr [a]
add         eax,1
mov         dword ptr [a],eax
mov         ecx,dword ptr [a]
sub         ecx,1
imul        ecx,dword ptr [a]
mov         dword ptr [b],ecx

(环境:VS2008)
除非你知道编译器在做什么,否则这样的代码是没有意义的

[[it] 本帖最后由 Syunxiacc 于 2008-9-9 00:23 编辑 [/it]]
2008-09-08 23:50
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
我把*看成是取内容符号了

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-09-08 23:53
就搞C
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-6-9
收藏
得分:0 
两个编译软件试过.VC中,同一个变量的改变会变成最后一次的改变,而在VS2008中则不会.
2008-09-09 00:07
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
* 是左到有的运算
所以应该是 24 正确
2008-09-09 00:54
ginowang11
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-9-8
收藏
得分:0 
优先级顺序: () ++ -- ×
所以 (a-0)*++a
先算 a-0   5
再算++a    6
答案 30 而不是 36
2008-09-09 08:19
ginowang11
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-9-8
收藏
得分:0 
++a*a--
int a=5
++a*a--结果为 36?
++a*--a 结果为25 ?
2008-09-09 08:22
快速回复:是VC编译器的问题吗
数据加载中...
 
   



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

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