| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 449 人关注过本帖
标题:各位帮我看一下这道小程序!怎么会这样?
只看楼主 加入收藏
linsunbin
该用户已被删除
收藏
已结贴  问题点数:20 回复次数:9 
各位帮我看一下这道小程序!怎么会这样?
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-22 22:27
hanzhenddd
Rank: 5Rank: 5
等 级:职业侠客
帖 子:90
专家分:361
注 册:2010-3-4
收藏
得分:10 
b2=(++a2)+(++a2)+(++a2);

问的很好,以前我也曾经疑问过,这其实是C语言过于自由造成的问题。。我们在书写中一定要主要类似的问题。。。
++a2的运算 编译后 处理方式为 先自增  然后再参与运算。
(++a2) + (++a2)

编译后同理,a2自增两次后运算。那么a2 的值为12, 结果为24 不是23,这是计算机处理的方式。。想要理解透彻的话,最好看看编译过程 gdb一下 或者看看反汇编代码。

那么(++a2) + (++a2) + (++a2), 结果呢?大家或许会猜,36我也犯过错。其实不然,+运算是从左到右运算。而且每次只能处理两个操作数。汇编中的add指令
那么运算的时候变成了 先执行 (++a2) + (++a2),结果出来后 再于后面的++a2 进行运算。 也就是24+13 =37。

        再次重申 尽量避免这样的 多个自增数相加的写法,会产生意想不到的错误。!!~


希望都楼主有所帮助!!
2010-05-22 23:10
落叶飘飘
该用户已被删除
收藏
得分:0 
回复 2楼 hanzhenddd
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-22 23:41
linsunbin
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-22 23:50
linsunbin
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-23 00:03
linsunbin
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-23 00:05
炫舞小子
该用户已被删除
收藏
得分:5 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-23 00:41
烧烤
该用户已被删除
收藏
得分:3 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-23 08:09
aiyinsitan
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:183
专家分:177
注 册:2010-4-22
收藏
得分:2 
回复 2楼 hanzhenddd
为什么他只自增两次,而不是自增3次为36
2010-05-23 08:18
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:0 
这都能看出来……强……

我很懒,但我讨厌别人说我懒……
2010-05-24 23:00
快速回复:各位帮我看一下这道小程序!怎么会这样?
数据加载中...
 
   



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

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