主题:  交换变量

s22

职务:版主
等级:4
金币:10.0
发贴:1634
#12003/4/25 13:25:43
x=1
y=2

x^=y
y^=x
x^=y
trace("x:"+x)
trace("y:"+y)
============
output
x:2
y:1



UndeadCraft

职务:版主
等级:4
金币:10.0
发贴:1993
#22003/4/25 14:24:07
异或还能这样用:)



5D荣誉版主

职务:普通成员
等级:2
金币:1.0
发贴:515
#32003/4/25 23:43:23
s22老有新东西,不错...



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#42003/4/25 23:46:00
无需中间变量的一个算法



5D荣誉斑竹

职务:普通成员
等级:2
金币:10.0
发贴:585
#52003/4/26 10:27:35
这样也行:
x=a;y=b;
x=x+y;
y=x-y;
x=x-y;



UndeadCraft

职务:版主
等级:4
金币:10.0
发贴:1993
#62003/4/28 9:21:49
bluejeck的方法通俗易懂:D



yeyeyeye

职务:普通成员
等级:1
金币:1.0
发贴:159
#72003/4/30 16:17:12
bluejack

好方法



高高

职务:普通成员
等级:1
金币:0.0
发贴:19
#82003/4/30 19:57:53
从理解上不好,这样违背了软件工程的原则,不宜理解,现在计算机硬件足够的宽裕,不能为了一个空间去降低程序易读性;
能用这样的方法的确很聪明,我不是挑剔大家,是说这样的弊处。
不要874我!



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#92003/4/30 22:42:15
如果用来封装,对效率的要求当然是越高越好,这种情况下按位运算很受欢迎(比如对整数*2常常用<<1代替)

从运算效率上来说,bluejack的算法效率也许还不及传统的赋值算法。不过另辟蹊径,思路开阔



蓝色天空

职务:普通成员
等级:1
金币:0.0
发贴:2
#102003/5/1 18:03:02
用异或比较好,不会产生溢出的问题.在汇编中可以用,
bluejack的算法很早就有了,用来练习对语言的掌握不错.
再比如不用数组对三个数的排序.