| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 443 人关注过本帖
标题:[讨论]交换程序的一点想法。。
只看楼主 加入收藏
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
收藏
 问题点数:0 回复次数:3 
[讨论]交换程序的一点想法。。

在以前的写C的时候经常用到三种交换算法:
第一种:(也是最基本的一种,就是临时变量法)
第二种: x=x+y;
y=x-y;
x=x-y;
第三种:这种只能在C或者C++种行,JAVA中行不通。就是通过异或操作符号,并且这种交换算法速度最快。

异或操作符:^ 有一条性质:x^y^x=y;根据这条性质,我们可以改变交换一下两个数的值。

x=x^y;

y=y^x;

x=y^x;

这样x,y其不是交换了哈哈。下面的小程序演示了一下这个交换问题哈哈。

public class CleverSwap{

public static void main(String[ ] args){

int x = 10;

int y= 15;

x ^ = y ^ = x ^ = y // (1)

System.out.println("x"+"="+x+"y"+"="+y);

}

}

上面的小程序的结果是x=0,y=10;结果不是预期的,哎。我郁闷。。。。这说明在JAVA中这种方法不行。。因为JAVA中在计算x^=y时,是先提取出了x的值。

JAVA中为了实现上面的表达式(1),是这样实现的:

int temp1 = x;

int temp2=y;

int temp3=x^y

int x=temp3;

int y=temp2*temp3;

int x=temp1^y;

呵呵,现在终于知道结果为什么是这样了哈哈。如果JAVA中不规定表达式的计算顺序的话,此方法也可以在JAVA中用了哈哈。

2007-06-24 20:06
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
收藏
得分:0 
如果JAVA中也是在计算后才提取变量的值就可以用速度快的交换算法了,直接在寄存器里就完成运算了呵呵。。
2007-06-24 20:09
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
呵呵,有道理~没注意在C中习以为常的东西在Java中会有差别~

淘宝杜琨
2007-06-24 20:28
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
收藏
得分:0 
哈哈,我也是那天写汇编程序的时候,当写一个异或表达式时,突然有的想法,然后总结了一下。。今天和各位大哥大姐分享讨论下哈哈
2007-06-24 20:31
快速回复:[讨论]交换程序的一点想法。。
数据加载中...
 
   



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

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