您的位置:首页 > 其它

使用异或实现两个数的换位,不需要中间变量,提高效率

2011-03-26 22:51 507 查看
前几天,在书城看书,看了一个很有趣的问题:两个数换位,不需要中间变量,提高程序执行效率。

核心代码如下,

Scanner s = new Scanner(System.in);
System.out.println("please enter the first number:");
int A = s.nextInt();
Scanner s1 = new Scanner(System.in);

System.out.println("please enter the second number:");
int B = s1.nextInt();
A = A^B;
B = B^A;
A = A^B;
System.out.println("A ="+A+"/n"+"B ="+B);

我想了好久,那是根据什么原理呢?

我试着去问一些同学,还有上技术Q群问,终于给我找到满意的答案。

我综合了一下我比较满意的答案,整理一下,供参考,不足之处,大虾们别见怪!

1)最初始的异或运算规定:

1^1 = 0;

1^0 = 1;

0^1 = 1;

0^0 = 0;

2)但是现在可以这么定义:

前提条件:两个数相等,那么就可以这样

任何数^任何数 = 0;

任何数^0 = 任何数;

0^任何数 = 任何数;

0 ^ 0 = 1;

3)同时,异或还满足交换率和结合律,如:

(A^B)^C = A^(B^C) = (A^C)^B

弄清上面三点之后,着手分析我碰到的题目:

A = A^B;
B = B^A;
A = A^B;

简单合并一下:

最原始的就是: B = B^A = B^A^B = A;此时B得到的是A的值

最原始的就是: A = A^B = A^B^A = B;此时A得到的是B的值

最终,打印出来的是:A = B

B = A

最后,谢谢所有帮过我,和没帮过我的人,来一句总结:知识不怕不懂,最怕就是不懂又不问人,这样才是可怕的!希望这篇BLOG对需要的人有帮助!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐