5,javase代码实战-运算符——位运算实现两个变量的互换及其他方式(四)
2018-02-25 10:36
489 查看
问题介绍:
在程序经常用到两个变量的互换,特别是在基于交换原理的排序算法中,如果需要大量的交换,那么高效的交换两个变量,无疑会提高程序的效率。
可以使用异或运算符来实现。
实现代码:
总结:^ 有一个特点就是 a^a = 0 即自身和自身异或为0。三行代码中,第一行为第二行提供服务。第一行和第二行为第三行提供服务。执行第二行 b=b^a 也就是 b =b^a^b 因为b^b=0 所以 b= a;执行第三行 a =a^b 也就是a=a^b^a 即a =b 。
扩展:
其他方法1:利用加减运算符实现
利用上面异或的分析方法,就可以理解了。这也是一种很好的方法,起码不使用辅助变量。
其他方法2 ,使用辅助变量【不建议使用】
在程序经常用到两个变量的互换,特别是在基于交换原理的排序算法中,如果需要大量的交换,那么高效的交换两个变量,无疑会提高程序的效率。
可以使用异或运算符来实现。
实现代码:
idea1(1, 2); public static void idea2(int a,int b){ a =a^b; b =b^a; a =a^b; System.out.println("a是:"+a); System.out.println("b是:"+b); }
总结:^ 有一个特点就是 a^a = 0 即自身和自身异或为0。三行代码中,第一行为第二行提供服务。第一行和第二行为第三行提供服务。执行第二行 b=b^a 也就是 b =b^a^b 因为b^b=0 所以 b= a;执行第三行 a =a^b 也就是a=a^b^a 即a =b 。
扩展:
其他方法1:利用加减运算符实现
a =a+b; b =a-b; a =a-b;
利用上面异或的分析方法,就可以理解了。这也是一种很好的方法,起码不使用辅助变量。
其他方法2 ,使用辅助变量【不建议使用】
int c =0; c=a; a=b; b=c;
相关文章推荐
- 2,javase代码实战-运算符——位运算实现加密解密 (一)
- 05-不借用第三个变量实现两个变量值互换(运算符)
- [Java] 不使用第三个变量实现两个整数类型变量互换(异或运算符)
- 利用异或运算实现两个变量的互换(学习)
- java中把两个变量进行值交换,通过异或两次运算就能实现值互换。
- 使用异或运算实现中两个变量互换的方法
- 10,javase代码实战-循环控制——使用while与自增运算符实现遍历数组(一)
- 三种方式实现两个变量互换
- Java基础应用之运算符(实现两个变量的互换(借助第3个变量))
- Java基础应用之运算符(实现两个变量的互换(不借助第3个变量))
- 4,javase代码实战-运算符——左移右移实现乘除(三)
- 实现两个整数变量的互换(不借助其他变量)
- 05-不借用第三个变量实现两个变量值互换(运算符)
- 异或运算来实现两个变量互换
- 不借助中间变量实现两个变量值得互换
- 不借助第三个变量,实现两个整数互换值
- 自定义UIPageControl 的Circle 与其他实现方式有几行代码改动,亲自试过
- 交换两个变量的不同实现方式
- 两个整形变量的互换;以及在不申请空间的情况下实现互换;十个数中求最大值
- Java基础知识强化05:不借助第三个变量实现两个变量互换