我们今天讲一个a和b两个数值交换的位运算使用方式
传统:
上面这个是我们最常用的方式,需要使用一个中间临时变量,今天我们换一个方式
位运算:
^是异或运算,那这个的原理是什么呢?我们来分析一下
先转二进制
m: 0101
n : 1010
m = m ^ n;
m : 1111
n = m ^ n;
n : 0101 (等于原来的m了)
m = m ^ n;
m : 1010
转换成10进制:
m=10,n=5;
这个有个疑问,异或到底是什么呢?我们来举个例子
假设有两个军队开战,每个部队在各自的区域设置士兵,设置了为1,未设置0
规则是:如果有争夺或者没有士兵就为空地,只有一方有人为占领
A方 B队
1 1
0 1
1 0
1 1
0 0
开战后:
A队 B队 结果
1 1 空地
0 1 占领
1 0 占领
1 1 空地
0 0 空地
打完收兵,两边将军肯定是要对对方的战略部署分析一番的,将军按照战地当时情况一分析,5个战区伍只有2、3位置的有人占领,那说明2、3战区是两个战力不一样的地方,其它地方的战力部署是一样的,所以都是空地,那就说明能获得不一样的地方,这个数据就是异或
A^B=01100
那我怎么知道对方的真实部队结构呢
因为战地很混乱,所以上面01100中的11是属于哪方也不知道
所以我们部署一个新队,兵力如下,如果当时存活下来的是自己这方的,那就和现在的抵消战力,变成无战力,也就是当时对方当时没有设置战力一致了,如果当时活下来的是对方的,那现在也一样,无人的也不会影响
A方 临队
1 0
0 1
1 1
1 0
0 0
A^临=11010 (就是B)
这样B的部署就知道了