C语言:交换两个变量不得使用第三个变量

在c语言中交换两个变量,首先我们会想到建立一个临时变量来存放,以达到交换的目的

例如下面的例子

~~~c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a = 3;
	int b = 5;
	int tmp;
	tmp = a;
	a = b;
	b = tmp;
	printf("%d\n", a);
	printf("%d\n", b);

	system("pause");
	return 0;
}

~~~

如果不得使用第三个临时变量,该怎么做呢???

1.我们可利用两个变量自身进行加减存放,也可达到此目的,代码如下:


~~~c

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int a = 3;
	int b = 5;
	a = a + b;
	b = a - b;
	a = a - b;
	printf("%d\n", a);
	printf("%d\n", b);
	system("pause");
	return 0;

}

~~~

 

2.上面这种方法虽然可行,但也存在一点问题若是两个变,量存放的数特别大,二者相加可能就会造成数据溢出,因此我们可采用^(异或)这种位操作来实现。

^(异或)对数据的二进制位进行操作,相同的二进制位取0,相反的二进制位取1,接下来我们进入实操。

~~~c

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int a = 3; //00000000000000000000000000000011
	int b = 5; //00000000000000000000000000000101
	a = a^b;   //00000000000000000000000000000110   a与b异或的结果类似于中间变量存放与a中
	b = a^b;   //00000000000000000000000000000011   这个中间变量与b异或结果为a,存放于b中
	a = a^b;   //00000000000000000000000000000101   同上
	printf("%d\n", a); 
	printf("%d\n", b);
	system("pause");
	return 0;
}

~~~

 这种方法就不会出现数据溢出的可能!!!


版权声明:本文为LoveHoneyYou原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。