关于c语言中交换两个数的方法

来源:互联网 发布:数据分析报表 编辑:程序博客网 时间:2024/05/11 09:49
#include<stdio.h>#define SWAP2(a,b) \{                  \    a = a + b;     \    b = a - b;     \    a = a - b;     \}#define SWAP3(a,b) \{                  \    a = a ^ b;     \    b = a ^ b;     \    a = a ^ b;     \}void swap1(int *a,int *b){int t;t=*a;*a=*b;*b=t;}void swap2(int* a,int* b){*a=*a+*b;*b=*a-*b;*a=*a-*b;}void swap3(int *a,int *b){*a^=*b;*b^=*a;*a^=*b;}int main(){    int a = 1;    int b = 2;    printf("a=%d,b=%d\n",a,b);        SWAP1(a,b);        printf("a=%d,b=%d\n",a,b);    SWAP2(a,b);printf("a=%d,b=%d\n",a,b);    SWAP3(a,b);printf("a=%d,b=%d\n",a,b);    swap1(&a,&b);printf("a=%d,b=%d\n",a,b);    swap2(&a,&b);printf("a=%d,b=%d\n",a,b);    swap3(&a,&b);printf("a=%d,b=%d\n",a,b);        return 0;}



总结:SWAP1-3中“\”为连接符,在其后不能有空格或其它字符;用宏定义的方法使得数据交换比函数更有效率,swap1-3实质上是SWAP1-3的函数形式.

 第一种很好理解,缺点是定义了第三个新变量

第二种优点是只使用了两个变量,缺点是a+b的值可能会超出Int范围,使计算结果错误

第三种方法不仅克服上以上的缺点,还使得程序运行最有效率。但其缺点也显而易见,只能用于整型数据的交换。


第三种方法的理解可以这样理解:任意的两个数a,b有a^(a^b)=(a^a)^b=b.
原创粉丝点击