两种方法用宏定义写出swap(x,y)

简介: <p>问题引出:</p> <p>如何将a,b交换,且不使用任何中间变量?</p> <p><br></p> <p>方法一:算术运算法</p> <p></p> <pre name="code" class="html">a=a+b;b=a-b;a=a-b;</pre><br><br><p></p> <p>方法二:逻辑运算法</p> <p></p> <pre name="c

问题引出:

如何将a,b交换,且不使用任何中间变量?


方法一:算术运算法

a=a+b;
b=a-b;
a=a-b;


方法二:逻辑运算法

a=a^b;
b=a^b;
a=a^b;


若采用宏定义完成此功能,对应有2种方法,如下示例代码:


</pre><pre name="code" class="html">#include<iostream>
using namespace std;

//宏定义swap(x, y),使之完成交换x,y的值
#define swap1(x, y) \
	(y) = (x) + (y); \
	(x) = (y) - (x); \
	(y) = (y) - (x);

#define swap2(x, y)\
	x = x^y;\
	y = x^y;\
	x = x^y;

int main()
{
	int a = 3, b = 5;
	cout<<a<<","<<b<<endl<<endl;
	
	swap1(a, b);
	cout<<a<<","<<b<<endl<<endl;

	swap2(a, b);
	cout<<a<<","<<b<<endl;

	return 0;
}


结果如下图:


注意:

对于swap1,当输入的数据是不同种类型的话,这个宏的结果是不对的。 

对于swap2,只适用于整型数据。


目录
相关文章
|
7月前
|
编译器 C语言 C++
【C语言】memset()函数(内存块初始化函数)
【C语言】memset()函数(内存块初始化函数)
89 0
|
7月前
|
编译器 C语言
C语言宏定义(#define定义常量​、#define定义宏​、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比)
C语言宏定义(#define定义常量​、#define定义宏​、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比)
|
6月前
|
Rust 安全 JavaScript
swap函数的用法
swap函数的用法
226 0
|
7月前
|
容器
常用库函数的用法——memset() / swap() / reverse() / unique()函数的用法
常用库函数的用法——memset() / swap() / reverse() / unique()函数的用法
47 0
|
7月前
#define定义常量和宏
#define定义常量和宏
41 0
|
7月前
|
编译器 C语言 C++
define与const关键字的多种用法
define与const关键字的多种用法
72 0
|
7月前
|
编译器
#define 宏定义看这一篇文章就够了
#define 宏定义看这一篇文章就够了
274 0
|
C语言
C语言:内存初始化函数memset()
函数原型:void* memset(void *s,int c,size_t n) 作用:将指针变量s所指向的地址,前n个字节用 ‘ c ’ 来初始化
130 1
|
编译器
#define 定义常量和宏
工作机理:直接替换,以下列代码为例编译器直接将用到max的地方替换为100
69 0
用#define宏实现Add函数
用#define宏实现Add函数
108 0