问题引出:

如何将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,只适用于整型数据。

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

  1. 使用宏定义写出swap(x,y)

    一般答案: #define swap(x,y) x = x + y; y = x - y; x = x - y; 但是在以下情况会出错! if( x > y) { swap( x , y ); ...

  2. 用宏定义写出swap(x,y)

    #include <stdio.h>// SWAP(x, y) 交换x,y的值 #define SWAP(x, y) \(y) = (x) + (y); \(x) = (y) - (x); ...

  3. Qt工作笔记-两种方法从容器中筛选出父类和子类(继承法、typeid法)

    两种方法程序运行界面效果都一样! 程序运行截图如下: 这个图随便看看就可以了,没啥用! 代码如下: widget.h #ifndef WIDGET_H #define WIDGET_H#include ...

  4. C++/C++11中用于定义类型别名的两种方法:typedef和using

    类型别名(type alias)是一个名字,它是某种类型的同义词.使用类型别名有很多好处,它让复杂的类型名字变得简单明了.易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的.在C++中,任何 ...

  5. Python数据分析:异常值检验的两种方法 -- Z 分数 上下分位点(放入自写库,一行代码快速实现)

    本文已在公众号 " 数据分析与商业实践 " 首发.关注一下~,更多商业数据分析案例源码等你来撩.后台回复 "异常值" ,即可获取本文的案例示范与包含详细注释的源 ...

  6. [shell]两种方法写出99乘法表

    两种方法不同点主要是输入最后的换行不同: #!/usr/bin/env bash for ((i=1;i<=9;i++)) do for ((j=1;j<=i;j++)) do echo  ...

  7. stm32 lwip 如何发送不出_mbedtls | 移植mbedtls库到STM32裸机的两种方法

    一.mbedtls 开源库 1. mbedtls是什么 Mbed TLS是一个开源.可移植.易于使用.代码可读性高的SSL库.可实现加密原语,X.509证书操作以及SSL / TLS和 DTLS 协议 ...

  8. c语言求出两个最大素数,求两个正整数的最大公约数      思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法。通式分别为 f(x, y) = f(y, x%y...

    求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y), f(x, y) = f(y, x - y) ( ...

  9. Java中的string定义的两种方法和区别

    java中的String定义的两种方法和区别 第一种:new方式 String s1 = new String("hello world"); String s2 = new St ...

最新文章

  1. 安装ccs5.5总出现错误_《西游记》“斗法降三怪”,出现错误而补拍,观众总觉得改过结尾...
  2. ajax请求相关问题
  3. [C#.NET 拾遗补漏]08:强大的LINQ
  4. 【Python】一种pyahocorasick库安装方法
  5. matlab 快捷键
  6. MarkDown说明
  7. android版本下载地址 http,Android ADT下载地址(含各版本)
  8. ubuntu linux 软件安装位置,ubuntu查看软件安装位置
  9. All-Pay Contests(博弈论+机制设计) 论文阅读笔记
  10. PS-第七天-图层混合模式及图层蒙版
  11. 360无线网怎么没有网络连接到服务器,360路由器设置成二级路由器教程 | 192路由网...
  12. vue 父组件与子组件直接的相互传值(愚见)
  13. 在Windows7 系统上部署DNS服务器
  14. 网络营销之网络炒作案例分析、精髓及方法讨论
  15. 面试官这样问我Java反射原理,我刚好都会
  16. 2012年成都赛区小结
  17. mysql类似于水仙花_福建水仙花,美名扬天下
  18. java读取大文件并添加入库,按行读取
  19. 医药CRM解决方案,助力医药企业数字化转型
  20. 《三体》动画热播,当代人类能用量子计算突破智子封锁吗?

热门文章

  1. sx1278组网-子设备
  2. 网站制作入门指导教程
  3. 漂亮的HTML网站赞助打赏单页源码
  4. 码流、单码流、双码流、多码流
  5. 电商直播方案主要有哪些内容?
  6. 铲个屎都这么硬核?!小哥用姿势检测模型,搞了个狗粑粑探测摄像头
  7. 腾讯推出微信企业服务平台风铃
  8. 模仿dos窗口下的windows窗口程序
  9. 我的世界正版服务器客户端,我的世界1.11.2
  10. 一个产品人和“阿里云”的故事