通过不同的方法对变量进行数据交换,下面是4种方法:
前三种的共同有点是他们要比第四种节省空间,比如在嵌入式中内存比较小,会用到前3种方法
在前三种方法中前两种又容易产生溢出,所以都数据有范围要求
第三种用到的是位运算种的异或,先将两个数相互异或,再进行一次异或即可还原,注意还原时候的顺序
#include<stdio.h>
void method_1(int x, int y);
void method_2(int x, int y);
void method_3(int x, int y);
void method_3(int x, int y);
void main()
{
int a, b , z;
printf("请输入两个整数:");
scanf("%d%d",&a,&b);
method_1(a, b);
method_2(a, b);
method_3(a, b);
method_4(a, b);
}
void method_1(int x, int y)
{
printf("没有交换:x=%d,y=%d\n", x, y);
x = x + y;
y = x - y;
x = x - y;
printf("交换:x=%d,y=%d\n", x, y);
}
void method_2(int x,int y)
{
printf("没有交换:x=%d,y=%d\n", x, y);
x = x * y;
y = x / y;
x = x / y;
printf("交换:x=%d,y=%d\n", x, y);
}
void method_3(int x, int y)
{
printf("没有交换:x=%d,y=%d\n", x, y);
x = x ^ y;
y = x ^ y;
x = x ^ y;
printf("交换:x=%d,y=%d\n", x, y);
}
void method_4(int x, int y)
{
printf("没有交换:x=%d,y=%d\n", x, y);
int z;
z = x;
x = y;
y = z;
printf("交换:x=%d,y=%d\n", x, y);
}