| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5374 人关注过本帖
标题:交换两个数字,不引入第三个变量的方法
只看楼主 加入收藏
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
哦?我试试看……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-24 12:29
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
好像是像燕子说的那样。。。哦也看错了。。什么时候要在看看汇编。。。放了都3年了。。

学习需要安静。。海盗要重新来过。。
2008-06-24 12:32
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
写成这个形式:
template<class Type>
inline swap(const Type &x, const Type &y)
{  
    x+=y;
    y=x-y;
    x-=y;
}
只考虑内置整型的Type,要交换的两个变量是Type类型的,这个算法一定对。

至于为什么,你去看补码运算原理。

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-06-24 12:33
bianchengfeng
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2008-3-1
收藏
得分:0 
我晕
一段简单的代码
被说的连我自己都看不懂了
呵呵
o(∩_∩)o...
2008-06-24 12:33
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
哦,我想明白了……
    x+=y;
    y=x-y;
    x-=y;
假设第一条指令溢出,那么x=(x+y)-2^32;
那么第二条指令变成 (x+y)-2^32-y=x-2^32。
第三条变成(x+y)-2^32-(x-2^32)=y
因为2^32超过整数范围,加减无影响,所以对结果无影响……

大意了大意了……

不过,还是不玩这种东西的好,与其这样,不如多个临时变量……

我还得去易码把我原来的发言改回来- -那里居然没人发现这个东西是正确的……

最后赞一下LZ的研究精神,是自己发现的么?

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-24 12:33
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 
异常只是高级语言的东西,ASM 没有所谓的异常。
2008-06-24 12:34
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
话说,其实不需要看补码运算原理……虽然看了的确有帮助……
多年浸淫计算机,我的思想已经完全转化为补码二进制式的了- -

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-24 12:34
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
回复 20# 野比 的帖子
上面有人说异常么?

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-24 12:36
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 
没有,因为你用add溢出来驳lz,所以我插一句罢了
2008-06-24 12:37
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
额……事实上,add溢出,也就是个标志位的问题
算上OF,其实根本就不会溢出- -
顺带说说,溢出不算异常……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-24 12:39
快速回复:交换两个数字,不引入第三个变量的方法
数据加载中...
 
   



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

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