一、编程思想
- 通过建立第三个变量来交换数值;
- 不建立变量,通过加减的方式交换(PS:如果俩个数值过大,则可能会溢出)
- 不建立变量,通过异或操作符交换(最高效简洁,不会溢出,是1、2的升级)
异或交换
将数值以ASCII码的形式,按二进制位异或操作;
例如:
- num1 = 3 = 011(二进制)
- num2 = 5 = 101
异或:相同为0,相异为1
num1 -- 011
num2 -- 101
num1 = temp1 = num1 ^ num2 = 110
num1 = temp = 110
num2 -- 101
num2 = temp2 = temp1 ^ num2 = 011 = 3
num1 = temp1 = 110
num2 = temp2 = 011
num1 = temp3 = temp1 ^ temp2 = 101 = 5
此时num1 = 5
,num2 = 3
两数完成交换
#include<stdio.h>
int main(void)
{
int num1=0, num2=0, tmp=0;
printf("num1=%d,num2=%d\n\n", num1, num2);
scanf("%d%d",&num1, &num2);
// 方法一:中间变量
tmp = num1;
num1 = num2;
num2 = tmp;
// 方法二:加减法
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
// 方法三:异或操作
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
printf("num1=%d,num2=%d",num1, num2);
return 0;
}