美文网首页
C语言 宏定义 swap

C语言 宏定义 swap

作者: guanjianhe | 来源:发表于2018-08-22 18:10 被阅读0次

方法1:

#define swap(x,y)   do{x=x+y;y=x-y;x=x-y;}while(0)

方法2:

#define swap(x,y)   do{a^=b;b^=a;a^=b;}while(0)

说明:

  1. a^=b;:把a^b结果赋值给a
  2. b^=a;:相当于b=b^(a^b)。而b^(a^b)等于a^b^bb^b的结果为0因为同一个数与本身相异或,结果必为0因此b的值等于a^0,即a
  3. a^=b;:由于a的值等于a^bb的值等于a,因此,相当于a=(a^b)^a,即a的值等于b^a^a,相当于b^0,等于b

注:此方法只适用于整型数据

方法3:

#define swap(x,y)   do{typeof(x) t;t=x;x=y;y=t;}while(0)
#include <stdio.h>

#define swap1(x,y)   do{x=x+y;y=x-y;x=x-y;}while(0)
#define swap2(x,y)   do{a^=b;b^=a;a^=b;}while(0)
#define swap3(x,y)   do{typeof(x) t;t=x;x=y;y=t;}while(0)

int main()
{
    int a=2,b=3;
    float fa=2.5f,fb=4.2f;
    
    printf("交换前a=%d\t,b=%d\n",a,b);
    swap1(a,b);
    printf("交换后a=%d\t,b=%d\n\n",a,b);
    
    printf("交换前a=%d\t,b=%d\n",a,b);
    swap2(a,b);
    printf("交换后a=%d\t,b=%d\n\n",a,b);
    
    printf("交换前a=%d\t,b=%d\n",a,b);
    swap3(a,b);
    printf("交换后a=%d\t,b=%d\n\n",a,b);
    
    
    
    printf("交换前fa=%.2f\t,fb=%.2f\n",fa,fb);
    swap1(fa,fb);
    printf("交换后fa=%.2f\t,fb=%.2f\n\n",fa,fb);
    
    printf("交换前fa=%.2f\t,fb=%.2f\n",fa,fb);
    swap2(fa,fb);
    printf("交换后fa=%.2f\t,fb=%.2f\n\n",fa,fb);
    
    printf("交换前fa=%.2f\t,fb=%.2f\n",fa,fb);
    swap3(fa,fb);
    printf("交换后fa=%.2f\t,fb=%.2f\n\n",fa,fb);   
   
   return 0;
}
输出:
交换前a=2  ,b=3
交换后a=3  ,b=2

交换前a=3  ,b=2
交换后a=2  ,b=3

交换前a=2  ,b=3
交换后a=3  ,b=2

交换前fa=2.50  ,fb=4.20
交换后fa=4.20  ,fb=2.50

交换前fa=4.20  ,fb=2.50
交换后fa=4.20  ,fb=2.50

交换前fa=4.20  ,fb=2.50
交换后fa=2.50  ,fb=4.20

相关文章

  • C语言 宏定义 swap

    方法1: 方法2: 说明: a^=b;:把a^b结果赋值给a b^=a;:相当于b=b^(a^b)。而b^(a^b...

  • 精解C语言预处理命令(三)之“宏”的用法二

    关于C语言带参数的宏定义中的参数 C语言允许宏带有参数。在宏定义中的参数称为“形式参数”,在宏调用中的参数称为“实...

  • C语言宏定义

    1、一般定义 2、条件判断 3、编译时错误信息 4、系统常见自定义宏 5、宏参数的字符串化和宏参数的连接

  • C语言学习:C语言宏定义

    学C语言很久了,但还是不敢用宏定义,大神喜欢用宏定义。关于宏定义你又了解多少了,下面我们说一下宏定义。 宏定义的概...

  • C语言自定义布尔bool类型

    C语言没有布尔类型,可以采用宏定义创建该类型

  • 编程基础

    C语言 #define定义的宏和const定义的常量有什么区别? defined定义宏的指令,程序在预处理阶段将用...

  • C语言宏定义#define

    姓名:吕彬 学号:1613014035 【嵌牛导读】#define 宏定义是个演技非常高超的替身演员,但也会经常耍...

  • SDWebImage源码解读

    整体架构 按照分组方式,可以分为几组 定义通用宏和方法 SDWebImageCompat: 宏定义和C语言的一些工...

  • C语言-宏定义-带参宏

    宏定义指令 (# define)用来定义一个标识符和一个字符串,以这个标识符来代表这个字符串。 不带参数的宏定义:...

  • 3、Swift-“宏定义”的实现

    OC中的宏定义 C语言的宏定义, 并不是很严谨, 任何代码段都可以进行宏定义, 甚至是无效的无序的乱码也可以. 因...

网友评论

      本文标题:C语言 宏定义 swap

      本文链接:https://www.haomeiwen.com/subject/lkgyiftx.html