您的位置:首页 > 其它

两个数不通过中间变量交换值的原理分析!

2010-12-05 15:03 253 查看
public class num{
public static void main(String args[]){
int i=10;
int j=5;

i=i^j;
j=i^j;
i=i^j;

System.out.println("i:"+i);
System.out.println("j:"+j);
}
}


 

最简单的代码就该这样写了吧?

 

或许对于像我现在这样的初学者很多都没见过这个符号 ^

 

这个是个异或运算的符号,好的,我们现在开始分析它的运行原理!

异或运算的知识请点击此连接后了解

http://baike.baidu.com/view/1452266.htm

 

将i和j的初始值给2进制化后

分别为

10 -- 0
5  -- 1
2  -- 0
1

 

10的二进制就为1010

-----------------------------

5 -- 1

2 -- 0

1

 

5的二进制就为 101

第一步:

i=i^j;

好了,我们将2个数都转换成了二进制后

在把他们异或运算下

 

1010

0101             --- 补0

1111             --- 或运算的结果

 再把二进制的1111转换成十进制的

1*2^3+1*2^2+1*2^1+1*2^0

8+4+2+1=15

现在的i的值就等于15了

 

第二步:

j=i^j;

1111

0101

1010             

 再把二进制的1010转换成十进制的

1*2^3+0*2^2+1*2^1+0*2^0

8+0+2+0=10

现在j的值就等于10了

 

第三步:

i=i^j;

1111

1010

0101

现在i的值就等于5了

 

最后就成功的将i和j的值给交换了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: