第一种 中间变量
这种是最正常的思维,易于理解。但是缺点是需要中间变量的内存开销。
int t = a;
a = b;
b = t;
第二种 存和求差
相当于我们先让a储存a+b的和,b只需要求出和 - b就是a的值,a可以通过b已经得到的a和自己做差求出b的值。
这种方法稍微不易理解,而且存在溢出风险,在没有确定数据大小的时候应该注意
a=a+b;
b=a-b;
a=a-b;
第三种 异或运算
异或就是对比两个值,“异” 可以理解为“不同”,这个运算符只要前后两个结果不一致就为True
比如:(3>2) ^ (3>4) = true (3>2) ^ (3<4) = false
如果是两个数组进行按位异或运算,那么就是将两个数字转化成二进制表示形式,竖着按照对应的位置进行 ^ 计算(1当做true 0当做false),将计算后的二进制转化为十进制
所以就有了这种写法:
a=a^b;
b=a^b;
a=a^b;
如果还没理解我们来用一组数字做例子,假设a和b均为int类型,且 a = 3 b = 5
第一步:a = a ^ b = 3 ^ 5 = 6
第二步:b = a ^ b = 6 ^ 5 = 3
此时b已经获得了a的值
第三步:a = a ^ b = 6 ^ 3 = 5
此时a已经获得了b的值
其实这个方法的思想和第二种很类似,但是也存在溢出的风险,但是和第二种相比溢出风险小了很多