前言
下面给出不使用中间变量交换两个整形数的两种方法。
1、
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int num1 = 3;
int num2 = 5;
printf("num1:%d num2:%d\n", num1, num2);
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
printf("num1:%d num2:%d\n", num1, num2);
return 0;
}
注意:这里虽然能够交换两数,但是当数字足够大时发生进位,int类型容纳不了时就会出现问题。
2、
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int num1 = 3;
int num2 = 5;
printf("num1:%d num2:%d\n", num1, num2);
num1 = num1^num2;
num2 = num1^num2;
num1 = num1^num2;
printf("num1:%d num2:%d\n", num1, num2);
return 0;
}
这里给出的代码使用了异或的方式,避免了进位的发生。
总结:上面给出的方法都存在一定问题,第一种存在进位可能,第二种可读性差处理慢,所以一般还是使用中间变量来完成交换。