| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 963 人关注过本帖
标题:各位前辈露露脸帮下忙 谢谢了
只看楼主 加入收藏
为了未来
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:26
专家分:20
注 册:2012-2-18
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:20 
各位前辈露露脸帮下忙 谢谢了
弱弱的问一下为什么(++5)+(++5)+(++5)=22而不是21或者24啊
搜索更多相关主题的帖子: 露露 
2012-02-20 19:40
zxd675816777
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:252
专家分:631
注 册:2012-2-3
收藏
得分:0 
额。。。学习下

数学好难!
2012-02-20 20:58
为了未来
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:26
专家分:20
注 册:2012-2-18
收藏
得分:0 
问题补充  就这个  为什么
#include "stdafx.h"
#include<stdio.h>
main()
{
    int i=5,j;
    j=(++i)+(++i)+(++i);
    printf("%d",j);
}
2012-02-20 21:20
wtwj1314
Rank: 1
等 级:新手上路
帖 子:14
专家分:5
注 册:2012-2-14
收藏
得分:5 
LZ自增或自减使用对象是变量,怎么++5?,若是这样就可以了.
int a=5;
(++a)+(++a)+(++a)
由于是++a,因此先自增,再算表达式.
a=a+1=6  a=a+1=7   a=a+1=8
此时a的值是8,之后3个8相加是24
2012-02-20 21:21
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
VC6 debug版这个结果是22
2012-02-20 21:34
wtwj1314
Rank: 1
等 级:新手上路
帖 子:14
专家分:5
注 册:2012-2-14
收藏
得分:0 
Turbo C++3.0上是24啊!!!
2012-02-20 21:40
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:15 
我个人挺反感这种代码的 不知道为啥有人愿意研究这个。。

编译器咋理解都说不明白 有意思么

反汇编

00401028  |.  C745 FC 05000>MOV [LOCAL.a],5
0040102F  |.  C745 F8 00000>MOV [LOCAL.j],0
00401036  |.  8B45 FC       MOV EAX,[LOCAL.a]
00401039  |.  83C0 01       ADD EAX,1
0040103C  |.  8945 FC       MOV [LOCAL.a],EAX
0040103F  |.  8B4D FC       MOV ECX,[LOCAL.a]
00401042  |.  83C1 01       ADD ECX,1
00401045  |.  894D FC       MOV [LOCAL.a],ECX
00401048  |.  8B55 FC       MOV EDX,[LOCAL.a]
0040104B  |.  0355 FC       ADD EDX,[LOCAL.a]
0040104E  |.  8B45 FC       MOV EAX,[LOCAL.a]
00401051  |.  83C0 01       ADD EAX,1
00401054  |.  8945 FC       MOV [LOCAL.a],EAX
00401057  |.  0355 FC       ADD EDX,[LOCAL.a]
0040105A  |.  8955 F8       MOV [LOCAL.j],EDX
0040105D  |.  8B4D F8       MOV ECX,[LOCAL.j]
00401060  |.  51            PUSH ECX                                 ; /<%d>
00401061  |.  68 1C204200   PUSH OFFSET aa.??_C@_03HMFC@?$CFd?6?$AA@ ; |format = "%d
"
00401066  |.  E8 35000000   CALL aa.printf                           ; \printf

主要代码

int main(int argc, char* argv[])
{
   
    int a = 5, j = 0;
    j = (++a)+(++a)+(++a);
    printf("%d\n",j);
    return 0;
}

可能大家看不懂我翻译一下 VC6的debug编译器这么理解

从左到右 有括号先算括号 则先算 (++a)+(++a)  肯定是 a+=1;a+=1; 然后把两个括号里的加起来 就是7+7=14 然后 哎呀 原来后面还有个 得 再加 a+=1;变8了 然后加起来 前面的已经算了 直接用 14+8=22

等于22 不信我传程序你们看。。




[ 本帖最后由 zklhp 于 2012-2-20 21:44 编辑 ]
2012-02-20 21:42
wtwj1314
Rank: 1
等 级:新手上路
帖 子:14
专家分:5
注 册:2012-2-14
收藏
得分:0 
我用了以下VC6,也是22
2012-02-20 21:43
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用wtwj1314在2012-2-20 21:43:46的发言:

我用了以下VC6,也是22

嘿嘿 信了罢


[ 本帖最后由 zklhp 于 2012-2-20 21:47 编辑 ]
2012-02-20 21:44
wtwj1314
Rank: 1
等 级:新手上路
帖 子:14
专家分:5
注 册:2012-2-14
收藏
得分:0 
回复 7楼 zklhp
听口气就是高手,我们新手,呵呵.你能说一下Turb C++3.0的编译过程吗
2012-02-20 21:48
快速回复:各位前辈露露脸帮下忙 谢谢了
数据加载中...
 
   



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

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