[经验分享] "两数交换" 宏

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


您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

4057

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部