| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 714 人关注过本帖
标题:(X++)+(X++)+(++x)怎么算这个表达式的值啊??
只看楼主 加入收藏
爱德华
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:183
专家分:536
注 册:2011-5-29
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:8 
(X++)+(X++)+(++x)怎么算这个表达式的值啊??
    x=1   时,
(x++)+(x++)+(x++)怎么算这个表达式的值啊?
求详细的分析及过程。
搜索更多相关主题的帖子: 分析 表达式 
2011-09-09 15:11
zhcosin
Rank: 2
等 级:论坛游民
帖 子:29
专家分:77
注 册:2011-8-18
收藏
得分:0 
有必要把一个程序写得如此矫揉造作吗?编程的时候完全可以避免这种容易混淆的写法。
2011-09-09 17:55
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:10 
程序代码:
#include<stdio.h>
void main()
{
    int x1=1,x2=1;
    int s1,s2;
    s1=(x1++)+(x1++)+(x1++);
    printf("x1=%d\n",x1);
    s2=(++x2)+(++x2)+(++x2);
    printf("x2=%d\n",x2);
    printf("s1=%d,s2=%d\n",s1,s2);
}
x1=4
x2=4
s1=3,s2=10

执行s1=(x1++)+(x1++)+(x1++);时,x1++是先运算,后加1,即:s1=x1+x1+x1;x1=x1++;x1=x1++;x1=x1++;
执行s2=(++x2)+(++x2)+(++x2);时,x2++是先加1,再运算。即:x2=++x2;x2=++x2;s2=x2+(++x2);
我是这样理解的。
2011-09-09 19:46
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:5 
把这个问题移到c语言编程模块去

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-09-10 10:03
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:5 
void main()
{
00412050  push        ebp  
00412051  mov         ebp,esp
00412053  sub         esp,0F0h
00412059  push        ebx  
0041205A  push        esi  
0041205B  push        edi  
0041205C  lea         edi,[ebp-0F0h]
00412062  mov         ecx,3Ch
00412067  mov         eax,0CCCCCCCCh
0041206C  rep stos    dword ptr es:[edi]
    int x1=1,x2=1;
0041206E  mov         dword ptr [x1],1
00412075  mov         dword ptr [x2],1
    int s1,s2;
    s1=(x1++)+(x1++)+(x1++);
0041207C  mov         eax,dword ptr [x1]
0041207F  add         eax,dword ptr [x1]
00412082  add         eax,dword ptr [x1]
00412085  mov         dword ptr [s1],eax
00412088  mov         ecx,dword ptr [x1]
0041208B  add         ecx,1
0041208E  mov         dword ptr [x1],ecx
00412091  mov         edx,dword ptr [x1]
00412094  add         edx,1
00412097  mov         dword ptr [x1],edx
0041209A  mov         eax,dword ptr [x1]
0041209D  add         eax,1
004120A0  mov         dword ptr [x1],eax
    printf("x1=%d\n",x1);
004120A3  mov         esi,esp
004120A5  mov         eax,dword ptr [x1]
004120A8  push        eax  
004120A9  push        offset string "x1=%d\n" (416660h)
004120AE  call        dword ptr [__imp__printf (4192F0h)]
004120B4  add         esp,8
004120B7  cmp         esi,esp
004120B9  call        @ILT+355(__RTC_CheckEsp) (411168h)
    s2=(++x2)+(++x2)+(++x2);
004120BE  mov         eax,dword ptr [x2]
004120C1  add         eax,1
004120C4  mov         dword ptr [x2],eax
004120C7  mov         ecx,dword ptr [x2]
004120CA  add         ecx,1
004120CD  mov         dword ptr [x2],ecx
004120D0  mov         edx,dword ptr [x2]
004120D3  add         edx,1
004120D6  mov         dword ptr [x2],edx
004120D9  mov         eax,dword ptr [x2]
004120DC  add         eax,dword ptr [x2]
004120DF  add         eax,dword ptr [x2]
004120E2  mov         dword ptr [s2],eax
    printf("x2=%d\n",x2);
004120E5  mov         esi,esp
004120E7  mov         eax,dword ptr [x2]
004120EA  push        eax  
004120EB  push        offset string "x2=%d\n" (416658h)
004120F0  call        dword ptr [__imp__printf (4192F0h)]
004120F6  add         esp,8
004120F9  cmp         esi,esp
004120FB  call        @ILT+355(__RTC_CheckEsp) (411168h)
    printf("s1=%d,s2=%d\n",s1,s2);

如果你能看懂汇编 就立即了。。这个是反汇编出来的。

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2011-09-10 14:14
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:10 
    s1=(x1++)+(x1++)+(x1++);
0041207C  mov         eax,dword ptr [x1]
0041207F  add         eax,dword ptr [x1]
00412082  add         eax,dword ptr [x1]
00412085  mov         dword ptr [s1],eax
00412088  mov         ecx,dword ptr [x1]
0041208B  add         ecx,1
0041208E  mov         dword ptr [x1],ecx
00412091  mov         edx,dword ptr [x1]
00412094  add         edx,1
00412097  mov         dword ptr [x1],edx
0041209A  mov         eax,dword ptr [x1]
0041209D  add         eax,1
004120A0  mov         dword ptr [x1],eax
也就是 s = x1+x1+x1 = 3;
x1++;x1++;x1++;//

s1=(x1++)+(x1++)+(x1++); // s1=3,x1=4;


    s2=(++x2)+(++x2)+(++x2);
004120BE  mov         eax,dword ptr [x2]
004120C1  add         eax,1
004120C4  mov         dword ptr [x2],eax
004120C7  mov         ecx,dword ptr [x2]
004120CA  add         ecx,1
004120CD  mov         dword ptr [x2],ecx
004120D0  mov         edx,dword ptr [x2]
004120D3  add         edx,1
004120D6  mov         dword ptr [x2],edx
004120D9  mov         eax,dword ptr [x2]
004120DC  add         eax,dword ptr [x2]
004120DF  add         eax,dword ptr [x2]
004120E2  mov         dword ptr [s2],eax

也就是x2=x2+1;x2=x2+1;x2=x2+1; s2=x2+x2+x2。这时候,x2=4.s2=12.。


我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2011-09-10 14:19
爱德华
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:183
专家分:536
注 册:2011-5-29
收藏
得分:0 
回复 2楼 zhcosin
不是我想搞得更清楚点吗.

算法,数据结构,windows核心编程.
2011-09-16 22:24
omijialang
Rank: 1
等 级:新手上路
帖 子:11
专家分:2
注 册:2011-9-15
收藏
得分:0 
发生未定义行为吧(c语言不确定这样做的结果)   应该是。(好像听老师说过)
2011-09-17 16:33
艹蛋灬爱情
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-10-21
收藏
得分:0 
放到编程软件上运行一下
2011-10-25 16:30
快速回复:(X++)+(X++)+(++x)怎么算这个表达式的值啊??
数据加载中...
 
   



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

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