- #include <stdio.h>
- 2#include <stdlib.h>
- 3
- 4#define SWAP0(a,b) \
- 5 a= a^b,\
- 6 b= a^b,\
- 7 a= a^b
- 8
- 9#define SWAP2(a,b) \
- 10 { unsigned tempBuf[10];\
- 11 memcpy(tempBuf,&a,sizeof(a)); \
- 12 memcpy(&a,&b,sizeof(b)); \
- 13 memcpy(&b,tempBuf,sizeof(b));\
- 14 }
- 15
- 16#define SWAP3(a,b) \
- 17 { (sizeof(a) == sizeof(unsigned char)) ? SWAP0(*(unsigned char*)&a,*(unsigned char*)&b) :\
- 18 (sizeof(a) == sizeof(short)) ? SWAP0(*(short*)&a,*(short*)&b) :\
- 19 (sizeof(a) == sizeof(unsigned int)) ? SWAP0(*(unsigned int*)&a,*(unsigned int*)&b) :\
- 20 (sizeof(a) == sizeof(unsigned long long)) ? SWAP0(*(unsigned long long *)&a,*(unsigned long long *)&b):0;\
- 21 }
- 22/***************************************
- 23 * Fuction:main
- 24 * Decri :适应多种数据类型
- 25 * Author :(欢迎关注公众号:最后一个bug)
- 26***************************************/
- 27int main(int argc, char *argv[]) {
- 28
- 29 char ac = 11;
- 30 char bc = 88;
- 31
- 32 short a = 11;
- 33 short b = 88;
- 34
- 35 float af = 11;
- 36 float bf = 88;
- 37 printf("//***********SWAP2*********\n");
- 38 printf("ac = %d,bc = %d\n",ac,bc);
- 39 SWAP2(ac,bc);
- 40 printf("ac = %d,bc = %d\n",ac,bc);
- 41
- 42 printf("a = %d,b = %d\n",a,b);
- 43 SWAP2(a,b);
- 44 printf("a = %d,b = %d\n",a,b);
- 45
- 46 printf("af = %f,bf = %f\n",af,bf);
- 47 SWAP2(af,bf);
- 48 printf("af = %f,bf = %f\n",af,bf);
- 49
- 50 printf("//**********SWAP3************\n");
- 51 printf("ac = %d,bc = %d\n",ac,bc);
- 52 SWAP3(ac,bc);
- 53 printf("ac = %d,bc = %d\n",ac,bc);
- 54
- 55 printf("a = %d,b = %d\n",a,b);
- 56 SWAP3(a,b);
- 57 printf("a = %d,b = %d\n",a,b);
- 58
- 59 printf("af = %f,bf = %f\n",af,bf);
- 60 SWAP3(af,bf);
- 61 printf("af = %f,bf = %f\n",af,bf);
- 62
- 63 return 0;
- 64}