有两个整数a和b, 下面将用四种方法把他们的值进行交换
方法1: 借助临时变量tmp
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
printf("a=%d, b=%d\n", a, b);
int tmp = a; //创建临时变量tmp
a = b;
b = tmp;
printf("a=%d, b=%d\n", a, b);
return 0;
}
如果要求不能创建其他变量, 还有下面的方法
方法2: 巧妙进行数值运算
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
printf("a=%d, b=%d\n", a, b);
a = a + b; //此时a的值改变为30, b还是20
b = a - b; //b的值变为10
a = a - b; //a的值变为20
printf("a=%d, b=%d\n", a, b);
return 0;
}
方法3: 二进制异或运算
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
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);
return 0;
}
整数10的二进制数表示为: 00000000 00000000 00000000 00001010
整数20的二进制数表示为: 00000000 00000000 00000000 00010100
异或运算规则: 两个操作数对应二进制位相同为0, 不同为1
因此我们重点看最后8个比特位
第一个异或运算:
a = a ^ b = 00001010 ^ 00010100 = 00011110
第二个异或运算:
b = a ^ b = 00011110 ^ 00010100 = 00001010 = 原来的整数a
第三个异或运算:
a = a ^ b = 00011110 ^ 00001010 = 00010100 = 原来的整数b
方法4: 指针变量交换
#include<stdio.h>
void Swap(int* pa, int* pb)
{
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
int main()
{
int a = 10;
int b = 20;
printf("a=%d, b=%d\n", a, b);
Swap(&a, &b);
printf("a=%d, b=%d\n", a, b);
return 0;
}