一、关于交换两个变量的问题

变量的互换常见于数组排序算法中,当判断两个数组元素需要交互时,有许多的方法,下面的方法是本人在自学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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值