两种方法用宏定义写出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,只适用于整型数据。


目录
相关文章
|
5月前
|
编译器 C语言 C++
【C语言】memset()函数(内存块初始化函数)
【C语言】memset()函数(内存块初始化函数)
65 0
|
8天前
宏#define命令练习2
宏#define命令练习2。
19 12
|
8天前
宏#define命令练习
宏#define命令练习。
18 9
|
8天前
宏#define命令练习3
宏#define命令练习3。
15 6
|
5月前
|
编译器 C语言
C语言宏定义(#define定义常量​、#define定义宏​、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比)
C语言宏定义(#define定义常量​、#define定义宏​、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比)
|
4月前
|
Rust 安全 JavaScript
swap函数的用法
swap函数的用法
85 0
|
5月前
|
C语言
typedef 和 # define 用法区别
typedef 和 # define 用法区别
48 0
|
5月前
#define定义常量和宏
#define定义常量和宏
34 0
|
5月前
|
编译器 C语言 C++
define与const关键字的多种用法
define与const关键字的多种用法
62 0
|
5月前
|
编译器 C++
offsetof宏的使用、模拟实现及 (size_t)&(((struct_type*)0)->mem_name)的解释
offsetof宏的使用、模拟实现及 (size_t)&(((struct_type*)0)->mem_name)的解释