目录

•写在前面

•利用新变量

•利用加减法

•利用乘除法

•利用异或

•利用移位


•写在前面

交换两个数?听起来这不是很简单嘛,感觉没什么好讲的。不过这么想是因为很多时候都想简单了,没有把编程的巧妙使用到极致,那么接下来我们来看看,交换两个数这么简单的问题,怎么玩出不一样的花出来,哈哈哈。

•利用新变量

这种方法是非常非常基本的一种方式,直接利用一个新的变量作为中介,交换两个数。

temp = a;
a = b;
b = temp;

•利用加减法

使用加减法来进行交换,这种方法实际上就是先把a+b的结果暂时先保存在变量a中,然后通过这改变后的a和原始的b进行减法就可以得到交换后的b,不过要注意了,使用这种方法有一个不好的地方,就是a和b都是int类型,a+b的结果可以越界。

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

•利用乘除法

这个方法其实和加减法是一个道理,都是先将两个数的结合,储存在其中一个数中,然后通过分离得到两个数。乘除法就是,先将两个数相乘储存在a中,然后除出来,也很巧妙。一样的,这个方法比加减法更容易越界。

a = a * b;
b = a / b;
a = a / b;

•利用异或

使用异或的这个方法可以说非常适合计算机计算,计算速度也是非常快的,一般swap函数的底层实现会使用这种方式进行。毕竟计算机是二进制的世界,学会利用二进制,简直帅的不行。而且这种方式避免了越界问题,哈哈哈。

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

•利用移位

移位的方法也是使用二进制来完成,不过这种方法收到了位数的限制,比如在32位的机子中计算,int拆成高16位和低16位进行计算,相当于多了16位的暂存空间可以周转,但是此方法的缺陷也显而易见,就是如果被赋值的a或者b超过了16位,这种方法就会发生错误。

a <<= 16;
a |= b;
b = a >> 16;
a = a & 0xffff;

详解交换两个数的五种思路相关推荐

  1. 详解 CSS position定位的五种方式

    position 属性规定应用于元素的定位方法的类型(static.relative.fixed.absolute 或 sticky). 常见的固定定位,例如手机端的导航,快捷按钮.例如本站的&quo ...

  2. 详解PHP实现定时任务的五种方法

    定时运行任务对于一个网站来说,是一个比较重要的任务,比如定时发布文档,定时清理垃圾信息等,现在的网站大多数都是采用PHP动态语言开发的,而对于PHP的实现决定了它没有Java和.Net这种AppSer ...

  3. Trick 一题多解——交换两个数(swap)

    1. Python 的方式 a, b = b, a 2. 异或(避免中间变量的定义) (a⊕b)⊕a=b(a⊕b)⊕b=a(a⊕b)⊕a=b(a⊕b)⊕b=a (a\oplus b)\oplus a= ...

  4. 【CAD卡顿解决方法详解,网上最实用五种方法,开机卡顿,拖图卡顿,画直线卡顿等问题,一一详细教你解决】

    我们刚装好CAD时,往往会遇到启动缓慢,画直线卡顿等现象,接下来我就详细介绍如何处理这些问题 1 启动卡顿 面对启动卡顿,我们可以将"初始化界面"给关闭掉,在命令行中输入Start ...

  5. python比较两个字符串相似度_详解Python 字符串相似性的几种度量方法

    字符串的相似性比较应用场合很多,像拼写纠错.文本去重.上下文相似性等. 评价字符串相似度最常见的办法就是:把一个字符串通过插入.删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种 ...

  6. 模糊匹配 读音_onenote搜索机制详解②:两种搜索模式,模糊与精确匹配

    先从纯文本搜索讲起,这是最基本也是最重要的. 从这篇开始,以及接下来连续几篇文章,都会介绍搜索的基础功能.注意,这几篇文章中谈论的都是基本的.正常的搜索功能,暂时不考虑Bug等因素. 在很多软件(例如 ...

  7. 详解Java解析XML的四种方法

    http://developer.51cto.com  2009-03-31 13:12  cnlw1985  javaeye  我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...

  8. Kati详解-Android10.0编译系统(五)

    摘要:本节主要来讲解Kati把Makefile编译成build-xxx.ninja,那么Kati是什么? 是如何工作的呢? 阅读本文大约需要花费24分钟. 文章首发微信公众号:IngresGe 专注于 ...

  9. Spring框架学习教程,详解Spring注入bean的几种方式

    首先,要学习Spring中的Bean的注入方式,就要先了解什么是依赖注入. 依赖注入是指:让调用类对某一接口的实现类的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖. Sprin ...

最新文章

  1. tkmbatis 日志_mybatis打印sql日志
  2. ElasticSearch 2 (21) - 语言处理系列之单词识别
  3. MongoDB【最新版V2.6】- 发行说明
  4. 秒懂Mycat和MySQL的区别【转自百度知道】
  5. WCF 第十二章 对等网
  6. Java IO流学习总结二:File
  7. ASP.Net防范XSS漏洞攻击的利器HtmlSanitizer
  8. ELK 构建 MySQL 慢日志收集平台详解
  9. armbian搭建php环境,N1刷armbian后搭建lamp环境+可道云管理
  10. Android SeekBar和RatingBar示例教程
  11. Java基础篇之Java线程模型
  12. 如何用最简单的方法将PCweb改成适合各种设备的web
  13. 按键精灵 excel mysql_按键精灵常用插件介绍
  14. 树莓派(4B)入门教程
  15. HTML(简介及常用标签)
  16. 微信小程序实现拍照功能
  17. PhpStorm 远程连接服务器
  18. 基于猫眼票房数据的可视化分析
  19. 杠杆炒股的两种操作方法
  20. Project-1-Buffer-Pool-Manager

热门文章

  1. 【Latex学习笔记5】LaTeX中的篇章结构
  2. 蔚来换电站投入使用 换一次电池180元
  3. Node.js笔记:SerialPort(串口)模块使用(基于9.x.x)
  4. 无线图传- HDMI1.4 无线图传
  5. 为Spark 程序添加单元测试
  6. Java Netty 4.x 用户指南
  7. iOS开发-图片拉伸的实现
  8. Blackberry Windows+ eclipse环境配置及Helloworld
  9. latex数学公式编辑——代码大全(图片)
  10. 服务器虚拟化软件XenServer 常见问题