整形 swap(a,b)的三种形式
原创
©著作权归作者所有:来自51CTO博客作者DUT_LYH的原创作品,请联系作者获取转载授权,否则将追究法律责任
①引入第三个变量
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int a = 4, b = 5;
printf("a=%d b=%d\n", a, b);
int temp = a;
a = b;
b = temp;
printf("a=%d b=%d\n", a, b);
}
②求和法
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int a = 4, b = 5;
printf("a=%d b=%d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("a=%d b=%d\n", a, b);
}
③使用异或
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int a = 4, b = 5;
printf("a=%d b=%d\n", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a=%d b=%d\n", a, b);
}
解释:
1.任意一个变量X与其自身进行异或运算,结果为0,即X^X=0
2.任意一个变量X与0进行异或运算,结果不变,即X^0=X
3.异或运算具有可结合性,即a^b^c=(a^b)^c=a^(b^c)
4.异或运算具有可交换性,即a^b=b^a
第一步: a = a ^ b;
完成后 a变量的结果为a ^ b
第二步: b = a ^ b;
此时赋值号右边的a保存的是a ^ b的值,那么将赋值号右边的a用a ^ b替换,
得到(a ^ b) ^ b=a ^ (b ^ b)=a ^0=a,
即经过第二步运算后b中的值为a,即b=a,将a换到了b里