C语言交换两数
1. 简介
交换两数一般需要借助第三个数当作临时变量;
这里介绍几种不需要临时变量的写法,当然可能还有别的方法。
2. 方法
2.1 借助中间变量
void swap1(int *pa, int *pb)
{
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
2.2 利用加减运算符
void swap2(int *pa, int *pb)
{
*pa += *pb;
*pb = *pa - *pb;
*pa -= *pb;
}
2.3 利用乘除运算符
void swap3(int *pa, int *pb)
{
*pa *= *pb;
*pb = *pa / *pb;
*pa /= *pb;
}
2.4 利用异或运算符
void swap4(int *pa, int *pb)
{
*pa ^= *pb;
*pb ^= *pa;
*pa ^= *pb;
}
3. 总结
事实上,我们只需要找到运算符
o
p
1
o
p
2
op_1\ op_2
op1 op2, 满足
a
=
a
o
p
1
b
o
p
2
b
b
=
a
o
p
1
b
o
p
2
a
a = a\ op_1\ b \ op_2\ b\\ b= a\ op_1\ b\ op_2\ a
a=a op1 b op2 bb=a op1 b op2 a
就可以不借助中间变量交换两个变量
- 代码
#include <stdio.h>
void swap1(int *pa, int *pb)
{
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
void swap2(int *pa, int *pb)
{
*pa += *pb;
*pb = *pa - *pb;
*pa -= *pb;
}
void swap3(int *pa, int *pb)
{
*pa *= *pb;
*pb = *pa / *pb;
*pa /= *pb;
}
void swap4(int *pa, int *pb)
{
*pa ^= *pb;
*pb ^= *pa;
*pa ^= *pb;
}
int main()
{
int a0 = 3;
int b0 = 4;
printf("before swap1: a0: %d, b0: %d\n", a0, b0);
swap1( &a0, &b0);
printf("after swap1: a0: %d, b0: %d\n", a0, b0);
int a1 = 10;
int b1 = 22;
printf("before swap2: a1: %d, b1: %d\n", a1, b1);
swap2( &a1, &b1);
printf("after swap2: a1: %d, b1: %d\n", a1, b1);
int a2 = -243;
int b2 = 829;
printf("before swap3: a2: %d, b2: %d\n", a2, b2);
swap3( &a2, &b2);
printf("after swap3: a2: %d, b2: %d\n", a2, b2);
int a3 = 934;
int b3 = -234;
printf("before swap4: a3: %d, b3: %d\n", a3, b3);
swap4( &a3, &b3);
printf("after swap4: a3: %d, b3: %d\n", a3, b3);
return 0;
}