第一种:创建一个新的变量,进行交换,代码如下:
int main()
{
int a = 10;
int b = 20;
printf("a = %d, b = %d\n", a, b);//结果:a = 10, b = 20
int tmp = a;
a = b;
b = tmp;
printf("a = %d, b = %d\n", a, b);//结果:a = 20, b = 10
}
第二种:只用两个变量进行交换(+运算符)
int main()
{
int a = 10;
int b = 20;
printf("a = %d, b = %d\n", a, b);//结果:a = 10, b = 20
a = a + b;
b = a - b;
a = a - b;
printf("a = %d, b = %d\n", a, b);//结果:a = 20, b = 10
}
第三种:只用两个变量进行交换(^运算符)
运用了异或运算符(^)的功能:两个二进制位相同为0,不同为1;
1.任何数与0异或都是它本身; 例:a ^ 0结果为a
2.任何数与它本身异或都为0;例: a ^ a结果为0
int main()
{
int a = 10;
int b = 20;
printf("a = %d , b = %d\n", a, b);//结果:a = 10 , b = 20
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d , b = %d\n", a, b);//结果:a = 20 , b = 10
}
提醒:建议使用第三种方式;
1.只用了两个变量,未新开辟空间。
2.不会因为数据过大,而产生数据位溢出现象(方法二相加会产生溢出现象,虽然不影响结果)
第四种方法:这种方式比较牛马,就当看个笑话吧,初学者可能会犯。(原因是该方法未将空间中的两个数值进行交换,而是将输出时候的变量进行了交换)
int main()
{
int a = 10;
int b = 20;
printf("a = %d , b = %d\n", a, b);//结果:a = 10 , b = 20
printf("a = %d , b = %d\n", b, a);//结果:a = 20 , b = 10
}