互换两个变量,不使用中间变量

来源:互联网 发布:淘宝女装图片 编辑:程序博客网 时间:2024/05/22 04:25

第一种方法:

a = a+b;

b = a-b;

a = a-b;

代码如下:

#include "stdio.h"  int main(void)  {      int a,b;      printf("请输入两个变量a和b:/n");      scanf("%d %d",&a,&b);      printf("a和b交换前:/n");      printf("a=%d b=%d/n",a,b);      a=a+b;      b=a-b;      a=a-b;      printf("a和b交换后:/n");      printf("a=%d b=%d/n",a,b);      system("pause");      return 0;  }  

缺点:容易溢出。

 

第二种方法

ab异或的结果 ,和a异或得,和b异或得a

a = a^b;

b = a^b;

a = a^b;

代码如下:

#include "stdio.h"  int main(void)  {      int a,b;      printf("请输入两个变量a和b:/n");      scanf("%d %d",&a,&b);      printf("a和b交换前:/n");      printf("a=%d b=%d/n",a,b);      a=a^b;      b=a^b;      a=a^b;      printf("a和b交换后:/n");      printf("a=%d b=%d/n",a,b);      system("pause");      return 0;  }  


换成宏替换之后的代码是:

#include "stdio.h"  #define swap(a,b) (a)^=(b)^=(a)^=(b)  int main(void)  {      int a,b;      printf("请输入两个变量a和b:/n");      scanf("%d %d",&a,&b);      printf("a和b交换前:/n");      printf("a=%d b=%d/n",a,b);      swap(a,b);      printf("a和b交换后:/n");      printf("a=%d b=%d/n",a,b);      system("pause");      return 0;  }  


缺点:只适用于整数。

 

原创粉丝点击