两种方法用宏定义写出swap(x,y)
2015-10-30 11:25
295 查看
问题引出:
如何将a,b交换,且不使用任何中间变量?
方法一:算术运算法
方法二:逻辑运算法
若采用宏定义完成此功能,对应有2种方法,如下示例代码:
结果如下图:
注意:
对于swap1,当输入的数据是不同种类型的话,这个宏的结果是不对的。
对于swap2,只适用于整型数据。
如何将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,只适用于整型数据。
相关文章推荐
- JS中调用输出中文乱码怎么办?一步轻松解决
- WebView解析之适配
- 7个免费的Windows数据恢复工具
- git的操作整理
- java基础学习笔记(3)
- 如何将asp.net的后台cs代码移动到页面上
- zookeeper在windows下的伪集群安装和启动
- Lua篇(第05章):C++调用Lua的函数
- 关于jQuery删除弹出提示框的操作
- CentOS7安装MySQL5.6详细步骤
- js中Math.random()生成指定范围数值的随机数
- 在Ubuntu下安装、配置和测试cuda[复制]
- 遍历map的四种方法
- 使用BASE64编码解码
- Quartz任务调度基本使用
- C语言跳表(skiplist)实现
- MariaDB通用二进制部署手册
- GCD - 1
- artdialog4.1.7 中父页面给子页面传值
- mysql-普通查询(General Query)慢查询(Slow Query)相关日志配置