我们平常需要交换两个数值的话,一般会用一个中间变量来暂时存储变量值
如交换a,b两个值可以这样写:`int t;t=a;a=b;b=t;`这样就实现了两个值的交换。两个值的交换经常出现于数组排序算法中由于增加了临时变量,那么就可能增加系统资源的消耗,下面介绍一种更为高效的数值交换的算法;
本程序用java语言编写:
import java.util.Scanner; public class ab { public static void main(String[] args) { Scanner in =new Scanner(System.in); int a=in.nextInt(); int b=in.nextInt(); System.out.println("交换前的值:a="+a+" b="+b); a=a^b; b=a^b; a=a^b; System.out.println("交换后的值:a="+a+" b="+b); } }
5 3
交换前的值:a=5 b=3
交换后的值:a=3 b=5
本方法使用了" ^ "异或运算符,它的功能是参与运算的两个数各对应的二进制位做异或运算,当两对应的二进制位不同时结果为1,相同时结果为0;
假设我们给a=5,b=3;那么a用二进制表示为`0101`(取int低4位来举例),则b用二进制表示为`0011`顺序执行` a=a^b;b=a^b;a=a^b;`首先`a=a^b=0101^0011=0110=6`再执行`b=a^b=0110^0011=0101=5`最后执行`a=a^b=0110^0101=0011=3`执行完毕后,发现`a,b`两个值已经互换完成;
原文:https://www.cnblogs.com/tsingby/p/14732288.html