使用异或实现两个数的换位,不需要中间变量,提高效率
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对需要的人有帮助!
核心代码如下,
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对需要的人有帮助!
相关文章推荐
- 通过异或来实现2个数的交换(不需要中间变量)
- c语言中不需要中间变量就能实现两个数交换的几种算法
- 运用异或运算实现两个数不通过中间变量交换值的原理分析
- 使用位运算实现判断一个数是否是2的n次方,实现不需要中间变量进行两个变量值的交换
- 如何使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率
- Java中使用异或语句实现两个变量的互换
- 基于.NET的分词软件设计与实现V5.0--使用Hashtable和HashSet<T>提高分词效率
- 数据结构 10 队列 不使用代码复用 提高效率的实现
- C++交换两个数的值,不需要中间变量
- 如何实现提高UG软件license在企业中的使用效率
- 基于.NET的分词软件设计与实现V4.0--使用SortedList提高分词效率
- 使用JRebel实现Web项目热部署, 提高开发效率
- 如何实现提高UG软件license在企业中的使用效率
- 交换两个数不使用第三方变量=!!=深入理解按位异或运算符
- 不允许创建临时变量,交换两个数的内容(用异或实现)
- 题目要求:将a,b两个数的值进行交换,并且不使用任何的中间变量。
- 使用Git实现团队协作开发提高效率
- java使用异或实现变量互换和异或加密解密示例
- node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用提高nodejs调试效率
- 两个数换位运算(不用第三变量)--异或