在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版权协议,转载请附上原文出处链接和本声明。