您的位置:首页 > 其它

如何不使用第三个变量完成a和b的交换

2014-06-21 11:52 531 查看

假设要交换a和b的值。
 第一种方法:a=a+b;

                       b=a-b;

                       a=a-b;

       相应代码如下:

#include<stdio.h>
void swap(int *a,int*b){
*a=*a+*b;
*b=*a-*b;
*a=*a-*b;
}
int main(){
int a,b;
int *p1,*p2;
scanf("%d %d",&a,&b);
p1=&a;
p2=&b;
swap(p1,p2);
printf("a=%d,b=%d\n",*p1,*p2);
return 0;
}

这种方法有个弊端:容易越界,假设a和b都是32位数据,那么a=a+b就可能超过32位;

第二种方法:

a^a=0;

a^0=a;

a=a^b;

b=a^b(=a^b^b=a^0=a);

a=a^b(=a^b^a=a^a^b=0^b=b);

相应代码如下:

#include<stdio.h>
void swap(int *a,int*b){
if(*a==*b)return;
*a=*a^*b;
*b=*a^*b;
*a=*a^*b;
}
int main(){
int a,b;
int *p1,*p2;
scanf("%d %d",&a,&b);
p1=&a;
p2=&b;
swap(p1,p2);
printf("a=%d,b=%d\n",*p1,*p2);
return 0;
}这种方法对于a=b时,不适用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: