建筑工程网格化管理阿里巴巴seo排名优化
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;
}