打印
[经验分享]

"两数交换" 宏

[复制链接]
129|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cemaj|  楼主 | 2025-2-19 02:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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}


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

3870

帖子

2

粉丝