| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 13016 人关注过本帖
标题:q=(++j)+(++j)+(++j)怎么运算?
只看楼主 加入收藏
bianchengfeng
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2008-3-1
收藏
得分:0 
同意7#
vc++是这样的
2008-06-14 21:03
yypxjh
Rank: 1
来 自:上海松江
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-3-6
收藏
得分:0 
楼上的。这一步还是不怎么懂。(++j)+(++j)=7+7=14 。
j=5;怎么(++j)就是7了呢?
2008-06-14 21:41
我是流氓我怕谁
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-6-14
收藏
得分:0 
要是用的是visual studio 2008的话 得到的结果是24
2008-06-14 23:56
bgtech
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-6-14
收藏
得分:0 
我用WIN-TC的结果是24。
用C-FREE 4.0是22,
谁能给出个正确的答案?
2008-06-15 00:35
B07060332
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-6-15
收藏
得分:0 
12楼说的没错~~其实是8+8+8=24
2008-06-15 11:43
tianyahainiao
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-4-30
收藏
得分:0 
用vc6是25啊?
2008-06-15 15:36
Kid_X
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:216
专家分:515
注 册:2007-10-8
收藏
得分:0 
#include <stdio.h>
int main(void)
{
    int j=5,q;
    q=(++j)+(++j)+(++j);
    printf("j=%d,q=%d",j,q);
}
用Visual C++ 6.0编译
输出j=8,q=22
用VC中的debug反汇编:
q=(++j)+(++j)+(++j);
0040102F   mov         eax,dword ptr [ebp-4]  //把j的值传到寄存器EAX,dword ptr [ebp-4]存放的是变量j
00401032   add         eax,1                  //EAX加1
00401035   mov         dword ptr [ebp-4],eax   //EAX的值传到变量j,这两步实现第一个++j,此时j=6
00401038   mov         ecx,dword ptr [ebp-4]   //把j的值传到寄存器ECX
0040103B   add         ecx,1                   //ECX加1
0040103E   mov         dword ptr [ebp-4],ecx   //ECX的值传到变量j,这两步实现第二个++j,此时j=7
00401041   mov         edx,dword ptr [ebp-4]    //把变量j传到EDX
00401044   add         edx,dword ptr [ebp-4]    //再加上j的值,这一步实现了第一个加号的加法运算,内存中j变量的值仍是7
00401047   mov         eax,dword ptr [ebp-4]    //把j的值传到寄存器EAX
0040104A   add         eax,1                    //EAX加1
0040104D   mov         dword ptr [ebp-4],eax    //把EAX的值传送到变量j中,此时,变量j在内存中的值是8
00401050   add         edx,dword ptr [ebp-4]    //EDX加上j的值,EDX中存放的是前面的第一个加法运算的结果14,最后EDX的值为22
00401053   mov         dword ptr [ebp-8],edx    //把运算结果传到内存中变量q的地方,所以最后变量q为22
2008-06-15 16:11
coming
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2008-4-20
收藏
得分:0 
这个问题的答案是和编译器不同而不同的,因为c语言里没有明确的规定+号的求值顺序,也许是一起把f求出来再加加呢,要区分一下优先级和求值顺序,实际这个题就像是b+(++b)的意思是一样的,你不知道b是加之前还是加之后的值,这个随编译器的不同会不同。
2008-06-15 22:56
abcdjj3115
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-10-10
收藏
得分:0 
编译器不同结果应该是不同的,不过比较被大家所赞同的答案是:数学运算操作在编译过程中都是被当做树形结构来处理的,也就是说,结构是像这样的        +
                                                 /     \
                                                +     (++j)
                                               /  \
                                           (++j)  (++j)
2008-06-16 01:03
abcdjj3115
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-10-10
收藏
得分:0 
编译器不同结果应该是不同的,不过比较被大家所赞同的答案是:数学运算操作在编译过程中都是被当做树形结构来处理的,也就是说,结构是像这样的  
                                                    +
                                                 /     \
                                                +     (++j)
                                               /  \
                                           (++j)  (++j)
2008-06-16 01:03
快速回复:q=(++j)+(++j)+(++j)怎么运算?
数据加载中...
 
   



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

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