前几天,在书城看书,看了一个很有趣的问题:两个数换位,不需要中间变量,提高程序执行效率。
核心代码如下,
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对需要的人有帮助!