两种方法用宏定义写出swap(x,y)
问题引出:
如何将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)相关推荐
- 使用宏定义写出swap(x,y)
一般答案: #define swap(x,y) x = x + y; y = x - y; x = x - y; 但是在以下情况会出错! if( x > y) { swap( x , y ); ...
- 用宏定义写出swap(x,y)
#include <stdio.h>// SWAP(x, y) 交换x,y的值 #define SWAP(x, y) \(y) = (x) + (y); \(x) = (y) - (x); ...
- Qt工作笔记-两种方法从容器中筛选出父类和子类(继承法、typeid法)
两种方法程序运行界面效果都一样! 程序运行截图如下: 这个图随便看看就可以了,没啥用! 代码如下: widget.h #ifndef WIDGET_H #define WIDGET_H#include ...
- C++/C++11中用于定义类型别名的两种方法:typedef和using
类型别名(type alias)是一个名字,它是某种类型的同义词.使用类型别名有很多好处,它让复杂的类型名字变得简单明了.易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的.在C++中,任何 ...
- Python数据分析:异常值检验的两种方法 -- Z 分数 上下分位点(放入自写库,一行代码快速实现)
本文已在公众号 " 数据分析与商业实践 " 首发.关注一下~,更多商业数据分析案例源码等你来撩.后台回复 "异常值" ,即可获取本文的案例示范与包含详细注释的源 ...
- [shell]两种方法写出99乘法表
两种方法不同点主要是输入最后的换行不同: #!/usr/bin/env bash for ((i=1;i<=9;i++)) do for ((j=1;j<=i;j++)) do echo ...
- stm32 lwip 如何发送不出_mbedtls | 移植mbedtls库到STM32裸机的两种方法
一.mbedtls 开源库 1. mbedtls是什么 Mbed TLS是一个开源.可移植.易于使用.代码可读性高的SSL库.可实现加密原语,X.509证书操作以及SSL / TLS和 DTLS 协议 ...
- c语言求出两个最大素数,求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法。通式分别为 f(x, y) = f(y, x%y...
求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y), f(x, y) = f(y, x - y) ( ...
- Java中的string定义的两种方法和区别
java中的String定义的两种方法和区别 第一种:new方式 String s1 = new String("hello world"); String s2 = new St ...
最新文章
- 安装ccs5.5总出现错误_《西游记》“斗法降三怪”,出现错误而补拍,观众总觉得改过结尾...
- ajax请求相关问题
- [C#.NET 拾遗补漏]08:强大的LINQ
- 【Python】一种pyahocorasick库安装方法
- matlab 快捷键
- MarkDown说明
- android版本下载地址 http,Android ADT下载地址(含各版本)
- ubuntu linux 软件安装位置,ubuntu查看软件安装位置
- All-Pay Contests(博弈论+机制设计) 论文阅读笔记
- PS-第七天-图层混合模式及图层蒙版
- 360无线网怎么没有网络连接到服务器,360路由器设置成二级路由器教程 | 192路由网...
- vue 父组件与子组件直接的相互传值(愚见)
- 在Windows7 系统上部署DNS服务器
- 网络营销之网络炒作案例分析、精髓及方法讨论
- 面试官这样问我Java反射原理,我刚好都会
- 2012年成都赛区小结
- mysql类似于水仙花_福建水仙花,美名扬天下
- java读取大文件并添加入库,按行读取
- 医药CRM解决方案,助力医药企业数字化转型
- 《三体》动画热播,当代人类能用量子计算突破智子封锁吗?