| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1176 人关注过本帖
标题:[求助]问个小白问题
只看楼主 加入收藏
冥石之泪
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-5-21
收藏
 问题点数:0 回复次数:10 
[求助]问个小白问题
main()
{ int x=5,n;
n=(++x)+(++x);
printf("%d",n);
getch();
}

这个程序,n的值,我怎么算出来是13啊,用TC做出来是14的,晕死...我刚学C不久,还有很多不懂,麻烦告之,谢谢.....
搜索更多相关主题的帖子: 白问题 
2006-05-23 15:27
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

x先做两次自增为 7 7+7=14


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-23 15:51
道胎魔种
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-5-23
收藏
得分:0 
这个应该是7+6吧,怎么会是14呢?

[此贴子已经被作者于2006-5-23 16:10:40编辑过]



[FLY]我的论坛 " target="_blank">E城市俱乐部[/FLY]
2006-05-23 15:51
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
回复:(冥石之泪)[求助]问个小白问题
朋友,如果不是为了考级,最好不要做此类似是而非的题目。它们属于怪题、偏题,唯一的用途就是让程序变得晦涩难懂。谭先生在他的书里就呼吁过,叫大家不要写此类代码。钻研这些玩意儿好比钻牛角尖。
老版主的结论14完全正确。你认为的13是错的,但情有可原。实际情况可理解为CPU要等加号两侧的被加数x和加数x齐备了再作加法,因而形成7+7的情况。类似地,还可钻另一牛角:

int x = 5,s;
s=(x++)+(++x);
printf("%d,%d,%d\n",++s,x++,++x);

保证让你晕头转向。哈哈。

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-23 17:45
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
以下是引用feng1256在2006-5-23 15:51:00的发言:

x先做两次自增为 7 7+7=14

int main(void)

{ int x=5,n;
n=(++x)+(++x)+(++x); //是不是先做三次自增为8, 8+8+8=24. 但结果为22. WHY?
printf("%d",n);
getch();
}

2006-05-23 17:51
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
结果为24 你弄错了吧

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-23 17:55
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
回复:(xsimon)以下是引用feng1256在2006-5-23 15:5...
以下是引用xsimon在2006-5-23 17:51:00的发言:

int main(void)

{ int x=5,n;
n=(++x)+(++x)+(++x); //是不是先做三次自增为8, 8+8+8=24. 但结果为22. WHY?
printf("%d",n);
getch();
}

还真有爱钻研的!那我就来说说,为何正解为22而不是24:

C编译器处理表达式
(++x)+(++x)+(++x)
分三步走:
1。先完成粗体部分。效果:中间得数14,同时x=7
2。计算红色部分。得到x=8
3。14+8=22,搞定。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-23 18:03
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 

谢谢7楼,原来是这样.四个就为31了.
int main(void)

{ int x=5,n;
n=(++x)+(++x)+(++x)+(++x);
printf("%d",n);
getch();
}

2006-05-23 18:06
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
以下是引用–★–在2006-5-23 18:03:00的发言:

还真有爱钻研的!那我就来说说,为何正解为22而不是24:

C编译器处理表达式
(++x)+(++x)+(++x)
分三步走:
1。先完成粗体部分。效果:中间得数14,同时x=7
2。计算红色部分。得到x=8
3。14+8=22,搞定。



我怎么是24啊??

图片附件: 游客没有浏览图片的权限,请 登录注册




[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-23 18:08
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
这种东西,不同的编译器规定都不一样的. 还是不要深究了.不然头都大了.
2006-05-23 18:12
快速回复:[求助]问个小白问题
数据加载中...
 
   



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

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