前言
一般交换两个变量所存储的值,都需要声明一个临时变量来辅助交换如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 10;
int b = 5;
printf("交换前:a=%d,b=%d\n", a, b);
int temp = a;
a = b;
b = temp;
printf("交换后:a=%d,b=%d\n", a, b);
return 0;
}
但我们如何不借助临时变量就交换两个数的值,本文介绍以下两种方法。
一、使用数学方法
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 10;
int b = 5;
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;
}
下面用一张图介绍上述代码如何实现a和b中存储的值进行交换
方法一虽然容易理解,但两个数相加后可能会出现越界的情况,而方法二则不会发生这种情况
二、使用按位异或操作符
下面的代码使用按位异或操作符的两个特性即:
a^a=0 , a^0=0这两个公式。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 10, b = 5;
printf("交换前:a=%d,b=%d\n", a, b);
a = a ^ b;
b = a ^ b;//将a=a^b代入a中则可得b=a^b^b,由两个公式可知b中存放的是a的值
a = a ^ b;//同理可得a中存放的是b的值,至此交换完成
printf("交换后:a=%d,b=%d\n", a, b);
return 0;
}
总结
以上就是两种不声明额外的临时变量就可以交换两个变量中的值的方式