一:先声明temp为临时变量,先把a装进temp,temp=a,那么此时temp里面的值已经不存在了,但是不重要,本身temp本身的值没有意义。
然后再a=b,那b的值装进a,此时a已经等于b值,a的值不存在,但是不重要,此时a值已经存在temp里了
再然后,b=temp,那么ab两个变量在此时就转换完成了。
总结:没有什么好处坏处,属于标准用法。
*代码如下
···
temp=a;
a=b;
b=temp;
···
二:方法二不采用临时变量,直接在ab之间转换,弊端在于后期写程序如果数字过大超出int本身32位的值,ab相加容易爆。
*代码如下
···
int a=4;
int b=7;
b=a+b; // a=4 b=11
a=b-a; // a=7 b=11
b=b-a; // a=7 b=4
···
三:第三种转换形式运用到了位运算
解读:自己异或自己 = 0 任何一个数跟 0 异或是自身,所以 a ^ b ^ a 等于 b,a 出现两个进行抵消,所以得出结果为 b。
实例操作:
int a = 4
int b = 7
我们先声明,a = 4 b = 7
a = a ^ b; 那么a就等于 4 ^ 7 得出结果a = 4 ^ 7(在这个表达式中a的值本身我们是不知道的,所以当前a = 4 ^ 7)
b = a ^ b; 那么前面本身a是等于4 ^ 7的,现在来看b的结果是b = 4 ^ 7 ^ 7 (解析,4 ^ 7是第一步得出来的结果, ^ 7是b当前本身的值,前面知识点提到异或概念就是两两抵消取最后奇数的值,所以当前b = 4)
a = a ^ b; 现在来看,这句表达式当中的,a和b的值已经不再是ab最先本身的值了,通过前面第一步和第二部的异或位运算 a = a ^ b当中的(a ^ b 这两个值是已经变更了最先的本值,现在这里面的 a=4 ^ 7,b = 4 ) 解析:a = 4 ^ 7 ^ 4 ^ 7 ^ 7 通过运用异或两两抵消最后得出值是7,(4 7 4 7 7将两个7抵消,两个4抵消,最后还剩下一个7这就是结果),所以运行结果a = 7 b = 4,在此完成了交换。
*代码如下
···
int a = 4;
int b = 7;
a = a ^ b; //a = 4 ^ 7
b = a ^ b; //b = 4 ^ 7 ^ 7
a = a ^ b; //a = 4 ^ 7 ^ 4 ^ 7 ^ 7
···