dvbbs
收藏本页
联系我们
论坛帮助
dvbbs

堕落街论坛休闲之乐游戏体育 → 爱好编程的朋友,请进!


  共有481人关注过本帖树形打印

主题:爱好编程的朋友,请进!

帅哥哟,离线,有人找我吗?
necla
  11楼 个性首页 | 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:高三 主题:27 精华:0 贴子:2054 排名:11750 威望:5 排名:296 注册:2003/8/13 9:05:00 近访:2005/11/7 21:42:36
  发贴心情 Post By:2003/9/24 16:15:00

以下是引用libra01在2003-9-23 17:47:43的发言: 大家能否告诉我为什么运行的结果是10? int i(1); i=(++i)+(++i)+(++i); cout< 没说到点子上。


支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
楚狂
  12楼 个性首页 | 博客 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小五 主题:20 精华:0 贴子:373 排名:0 威望:2 排名:538 注册:2003/7/25 12:18:00 近访:2005/12/4 0:00:22
  发贴心情 Post By:2003/9/24 19:04:00

暈,編譯原理沒學過~


惟楚有狂于斯为盛
支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
影子
  13楼 个性首页 | 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小二 主题:12 精华:0 贴子:119 排名:0 威望:0 排名:0 注册:2003/7/12 0:12:00 近访:2003/11/18 18:38:00
  发贴心情 Post By:2003/9/26 12:33:00

i++ 是用前面的数据先运行~++i是先+1后运行


支持(0中立(0反对(0回到顶部
美女呀,离线,留言给我吧!
淡淡
  14楼 个性首页 | 博客 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 乡村边缘
等级:高三 主题:209 精华:0 贴子:1856 排名:0 威望:6 排名:253 注册:2003/8/30 22:44:00 近访:2005/2/23 14:23:00
  发贴心情 Post By:2003/9/26 12:36:00

费话,这还用说吗?


肉已归于土

血要归于水

骨头归于木

水生木长我

此日足可惜

此酒不足尝

舍酒去相语

共分一日光

Good good study

Day day up

支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
楚狂
  15楼 个性首页 | 博客 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小五 主题:20 精华:0 贴子:373 排名:0 威望:2 排名:538 注册:2003/7/25 12:18:00 近访:2005/12/4 0:00:22
  发贴心情 Post By:2003/9/26 13:56:00

當然是後+1囖~


惟楚有狂于斯为盛
支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
swstudio2002
  16楼 个性首页 | 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小一 主题:4 精华:0 贴子:69 排名:0 威望:0 排名:0 注册:2003/11/16 16:51:00 近访:2004/11/4 22:37:00
  发贴心情 Post By:2003/11/19 14:25:00

现在,编程没人用这么晦涩的编程风格 不符合软件工程和面向对象的要求


我叫莫原野
支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
libra01
  17楼 个性首页 | 博客 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:学前 主题:6 精华:0 贴子:40 排名:0 威望:0 排名:0 注册:2003/9/23 17:30:00 近访:2005/10/19 15:16:00
  发贴心情 Post By:2003/11/21 22:47:00

以下是引用necla在2003-9-24 16:15:19的发言: 没说到点子上。
既然如此,你应该说一点什么,告诉我什么是点子上吧。。


我的博客日志:http://pengwei.blogone.net

朋友,我真心爱你。
支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
苏铁
  18楼 个性首页 | 博客 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:高二 主题:62 精华:0 贴子:1579 排名:5893 威望:4 排名:296 注册:2003/10/27 13:10:00 近访:2010/5/14 0:37:36
  发贴心情 Post By:2003/11/21 22:54:00

我C语言是挂了的


回忆好比画框,被框住的已非原样的事物
支持(0中立(0反对(0回到顶部
帅哥哟,离线,有人找我吗?
谁在我心
  19楼 个性首页 | 博客 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:学前 主题:2 精华:0 贴子:22 排名:0 威望:0 排名:0 注册:2003/9/17 22:48:00 近访:2004/2/14 13:29:00
  发贴心情 Post By:2004/1/11 23:21:00

好有意思的问题,要是你懂汇编的话,着篇文章可能有帮助。我是看不懂 这里主要研究一下c语言和c++中的a++,++a
有分双操做数和多操做数之分
双操做数:
在语言中定义a++是先用后加,++a是先加后用。
实际上对双操做数来说的是在一个语句中结束前加和后加的问题 。
即如k=(++a)+(a++);
a++是语句结束后在后加,
++a是先加后计算再语句结束。

我举几个例子(用反汇编说明)
1 int k=2;
int val=0;
val=(k++)+(k++);

反汇编
8: int k=2;
00401028 mov dword ptr [ebp-4],2//// k的地址是dword ptr [ebp-4]
9: int val=0;
0040102F mov dword ptr [ebp-8],0//val的地址是dword ptr [ebp-8]
10: val=(k++)+(k++);
00401036 mov eax,dword ptr [ebp-4]// 把2放入eax中
00401039 add eax,dword ptr [ebp-4]// 把2+2=4放入eax中
0040103C mov dword ptr [ebp-8],eax//把eax中的4移回val中
0040103F mov ecx,dword ptr [ebp-4]
00401042 add ecx,1//
00401045 mov dword ptr [ebp-4],ecx//k地址中的值加1,k=3

00401048 mov edx,dword ptr [ebp-4]
0040104B add edx,1// 寄存器中的值加1,k=4
0040104E mov dword ptr [ebp-4],edx//移回k地址

结论:val=*( dword ptr [ebp-8])=4;k=4

2. int k=2;
int val=0;
k=(k++)+(k++);

反汇编
:
8: int k=2;
00401028 mov dword ptr [ebp-4],2//同上
9: int val=0;
0040102F mov dword ptr [ebp-8],0
10: k=(k++)+(k++);
00401036 mov eax,dword ptr [ebp-4]
00401039 add eax,dword ptr [ebp-4] //同上
0040103C mov dword ptr [ebp-4],eax//同上,不同的是计算结果存入k地址k=4
0040103F mov ecx,dword ptr [ebp-4]
00401042 add ecx,1//寄存器中的值加1,
00401045 mov dword ptr [ebp-4],ecx//k=5
00401048 mov edx,dword ptr [ebp-4]
0040104B add edx,1//寄存器中的值加1
0040104E mov dword ptr [ebp-4],edx//k=6

结论:k=*( dword ptr [ebp-4])=6;

3 int k=2;
int val=0;
val=(++k)+(++k);

反汇编:
8: int k=2;
00401028 mov dword ptr [ebp-4],2// k的地址是dword ptr [ebp-4]
9: int val=0;
0040102F mov dword ptr [ebp-8],0//val的地址是dword ptr [ebp-8]
10: val=(++k)+(++k);//k先加
00401036 mov eax,dword ptr [ebp-4]
00401039 add eax,1//寄存器中的值加1

0040103C mov dword ptr [ebp-4],eax//k=3
0040103F mov ecx,dword ptr [ebp-4]
00401042 add ecx,1//对k地址中的值加1,k=4
00401045 mov dword ptr [ebp-4],ecx
00401048 mov edx,dword ptr [ebp-4]
0040104B add edx,dword ptr [ebp-4]//k+k=8
0040104E mov dword ptr [ebp-8],edx//值移入val地址中val=8

结论:val=*( dword ptr [ebp-8])=8;k=4
4. int k=2;
int val=0;
k=(++k)+(++k);
反汇编:
8: int k=2;
00401028 mov dword ptr [ebp-4],2
9: int val=0;
0040102F mov dword ptr [ebp-8],0
10: k=(++k)+(++k);
00401036 mov eax,dword ptr [ebp-4]
00401039 add eax,1
0040103C mov dword ptr [ebp-4],eax
0040103F mov ecx,dword ptr [ebp-4]
00401042 add ecx,1
00401045 mov dword ptr [ebp-4],ecx
00401048 mov edx,dword ptr [ebp-4]
0040104B add edx,dword ptr [ebp-4]///以上同3例
0040104E mov dword ptr [ebp-4],edx// 值移入k地址k=8
结论:k=*( dword ptr [ebp-4])=8;

5. int k=2;
int val=0;
val=(++k)+(k++);

反汇编:


8: int k=2;
00401028 mov dword ptr [ebp-4],2
9: int val=0;
0040102F mov dword ptr [ebp-8],0
10: val=(++k)+(k++);
00401036 mov eax,dword ptr [ebp-4]
00401039 add eax,1
0040103C mov dword ptr [ebp-4],eax//k=k+1=3
0040103F mov ecx,dword ptr [ebp-4]
00401042 add ecx,dword ptr [ebp-4]//k+k=6
00401045 mov dword ptr [ebp-8],ecx//val=6
00401048 mov edx,dword ptr [ebp-4]
0040104B add edx,1//k=k+1=4
0040104E mov dword ptr [ebp-4],edx

结论:val=*( dword ptr [ebp-8])=6;k=4

6. int k=2;
int val=0;
k=(++k)+(k++);

反汇编:

8: int k=2;
00401028 mov dword ptr [ebp-4],2
9: int val=0;
0040102F mov dword ptr [ebp-8],0
10: k=(++k)+(k++);
00401036 mov eax,dword ptr [ebp-4]
00401039 add eax,1//k+1
0040103C mov dword ptr [ebp-4],eax//k=3
0040103F mov ecx,dword ptr [ebp-4]
00401042 add ecx,dword ptr [ebp-4]//k+k=6
00401045 mov dword ptr [ebp-4],ecx//k=6
00401048 mov edx,dword ptr [ebp-4]
0040104B add edx,1
0040104E mov dword ptr [ebp-4],edx//k=k+1=7

结论:k=*( dword ptr [ebp-4])=7;k=7

多操做数

多操做数(>2)头两个操做数同以上(中间值)而后面的数如是(++i)加1
如是(i++)不加1。赋值给变量如果不是本身则结束
如果是本身则要数(i++)个数如是n加n
举几个例子
1.
int k=2;
int val=0;
val=(k++)+(k++)+(++k);

反汇编:

331: int k=2;
00407488 mov dword ptr [ebp-14h],2
332: int val=0;
0040748F mov dword ptr [ebp-18h],0
333: val=(k++)+(k++)+(++k);
00407496 mov eax,dword ptr [ebp-14h]
00407499 add eax,dword ptr [ebp-14h]//以上同双操做数中间数存在eax中eax=4,k=2
0040749C mov ecx,dword ptr [ebp-14h]
0040749F add ecx,1
004074A2 mov dword ptr [ebp-14h],ecx//k=3
004074A5 add eax,dword ptr [ebp-14h]//eax+k=
004074A8 mov dword ptr [ebp-18h],eax//赋值给val=eax+k=7
004074AB mov edx,dword ptr [ebp-14h]
004074AE add edx,1
004074B1 mov dword ptr [ebp-14h],edx
004074B4 mov eax,dword ptr [ebp-14h]
004074B7 add eax,1
004074BA mov dword ptr [ebp-14h],eax

结论:val=*( dword ptr [ebp-18h])=6;k=5

2.
int k=2;
int val=0;
k=(k++)+(k++)+(++k);
反汇编:


331: int k=2;
00407488 mov dword ptr [ebp-14h],2
332: int val=0;
0040748F mov dword ptr [ebp-18h],0
333: k=(k++)+(k++)+(++k);
00407496 mov eax,dword ptr [ebp-14h]
00407499 add eax,dword ptr [ebp-14h]
0040749C mov ecx,dword ptr [ebp-14h]
0040749F add ecx,1
004074A2 mov dword ptr [ebp-14h],ecx
004074A5 add eax,dword ptr [ebp-14h]
004074A8 mov dword ptr [ebp-14h],eax//赋值给k=eax+k=7
004074AB mov edx,dword ptr [ebp-14h]
004074AE add edx,1
004074B1 mov dword ptr [ebp-14h],edx//k=k+1=8
004074B4 mov eax,dword ptr [ebp-14h]
004074B7 add eax,1
004074BA mov dword ptr [ebp-14h],eax//k=k+1=9

结论:val=*( dword ptr [ebp-14h])=9;

举个题
1.
int k=2;
int val =0;
val=(++k)+(++k)+(k++)+(++k) +(++k) +(++k) +(++k) +(k++)+(k++)+(k++);
val=4 + 4 +4 +5 +6 +7 +8 +8 +8 +8= 62

2.
int k=2;
int val =0;
k=(++k)+(++k)+(k++)+(++k) +(++k) +(++k) +(++k) +(k++)+(k++)+(k++);
4个k++
k=4 + 4+ 4 +5 +6 + 7 + 8 +8 +8 +8 在加 4=66


"a--,--a"与++a,a++相同.
版权属于原创作者!!!

支持(0中立(0反对(0回到顶部
美女呀,离线,留言给我吧!
淡淡
  20楼 个性首页 | 博客 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 乡村边缘
等级:高三 主题:209 精华:0 贴子:1856 排名:0 威望:6 排名:253 注册:2003/8/30 22:44:00 近访:2005/2/23 14:23:00
  发贴心情 Post By:2004/1/12 18:08:00

楼上的分析很透切,只是,这是32 位的,我看得有点汗,前面几个弄明白了,只是后面有几个看得懂,但是想不通。


肉已归于土

血要归于水

骨头归于木

水生木长我

此日足可惜

此酒不足尝

舍酒去相语

共分一日光

Good good study

Day day up

支持(0中立(0反对(0回到顶部
总数 21 上一页 1 2 3 下一页