变量的互换常见于数组排序算法中,当判断两个数组元素需要交互时,有许多的方法,下面的方法是本人在自学Java的过程中,看到和体会到的,因为目前还在自学的初级阶段,也不会写什么有质量的博客文章,只是作为用来督促自己学习。下面来介绍:
第一种:借助中间变量
int a;
int b;
int c ;
c = a;
a = b;
b = c;
第二种:
不借用中间变量,原因是为了节省系统资源,因为临时变量的创建增加了系统资源的消耗。
①
int a;
int b;
a = a^b;
b = b^a;
a = a^b;
详解:引用百度百科的原话如下,因为自己也不太清楚。
1
2
3
|
a1=a^b
b=a1^b
a=a1^b=a1^(a1^b)=a1^a1^b=b
|
注意:
1
|
a=a^b^(b=a);
//此类形式是不正确的UB行为,在不同编译器中会有不同的结果,切勿使用
这样就完成了a与b的交换。
|
综上:同一变量与另一变量和其异或值异或等于自身。
用例:可使用于加密算法某一环节或更多环节,使算法更复杂,不易被破解,安全性更高。
自我理解:
其实异或的运算方法是一个二进制运算:
1^1=0
0^0=0
1^0=1
0^1=1
两者相等为0,不等为1.
如果两个不同的变量a,b进行异或运算,
设a=8;b=9,就会惊奇的发现a^b不就为b么,其实两个
a=a^b=1000B^1001B=0001B;//a^b之后以定要赋值,异或“^”和其它为运算符并不会改变变量本身的值, 即“a^b;”没有 任何意义,必须它运算结果赋值给一个变量
b=b^a=1001B^0001B=1000B=8
a=a^b=0001B^1000B=1001B=9
所以实现了个变量的交换
②
int a;
int b;
a = a+b;
b = a-b;
a = a-b;