#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}