在进行两个变量的时候,常常会看到有些书误人子弟的推荐使用异或的方式:
方式一
{
  x = x ^ y;
y = x ^ y;
x = x ^ y;
}
而不是採用暂时变量实现交换:
方式二
{
int temp;
temp = a;     
a = b;
b = temp;
}
美其名曰:节省内存,提高执行速度。
暂时变量交换的方式:
可是,真的节省了内存吗?
使用这样的方式大部分时候,没有节省内存。由于。普通情况下编译器会将方式二中的暂时变量优化到寄存器中,不使用堆栈。
真的提高了执行速度吗?
下边的博客给出了非常具体的解答。
http://blog.csdn.net/do2jiang/article/details/4549679
http://blog.csdn.net/solstice/article/details/5166912
因为方式一,每一次运行都会多进行三次异或运算。

又因为方式一的代码,在编译器理解起来。可能比較困难所以编译器翻译出来的代码,运行效率更低。

关于优化:
http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2012/1224/11834.html
“过早的优化是万恶之源”,当我们没有确定程序影响性能最重要的20%代码时,最好不要进行优化。同一时候。在优化时,不要过于相信经验。由于CPU技术,编译技术。操作系统等等。都会让看似可行的技术,失效。
在优化前,通过实际的执行确定影响性能的代码,然后进行优化。
最后。从软件project的角度看,代码是写给人看的。最easy理解的代码,被维护的代价也最小。方式二的代码更easy阅读。
结语:
编译器非常强大,CPU技术进步非常快,我们的经验积累反而是最慢的。

多反思,多总结。

附注:
假设要作为面试题。交换一个32位无符号整形数的方案,倒是更能够考虑一下採用位运算的方式解决。

用异或来交换两个变量能提快速度是错误的相关推荐

  1. 【剑指offer】不使用新变量,交换两个变量的值,C++实现

    # 题目 不使用新变量,交换两个变量的值. # 思路 方法一:使用加减法操作,交换两个变量的值. A = A+B B = A-B A = A-B 方法二:使用异或运算,交换两个变量的值 A = A^B ...

  2. Python中有几种办法交换两个变量的值?

    交换两个变量的值方法,这个面试题如果只写一种当然很简单,没什么可以说的.今天这个面试是问大家有几种办法来实现交换两个变量的值 .在没开始看具体答案前,你可以先想想看 . 下面分别来说说这几种方法: 1 ...

  3. 交换两个变量ab的值PHP,由[交换两个变量的值问题]理解程序的时空复杂度

    由一个编程经典问题,交换两个变量的值入手,理解程序的时空复杂度(以下均使用PHP代码演示问题的解决方法)解决问题的方法一:1.方法文字描述:使用一个中间变量temp,实现两个变量值的互换2.实现的具体 ...

  4. 思维革命:交换两个变量的值

    思维革命:交换两个变量的值 本txt致力于展示位运算的美丽技巧的巧妙应用.利用了位运算之异或运算的一个美丽的特性.自己每次都要睁大了眼睛看哦.呵呵.当然了,这个是从基本做起来的.请认真explore ...

  5. php比较两个变量的值_总结PHP不用第三个变量交换两个变量的值的几种方法

    "PHP不用第三个变量交换两个变量的值"这个题看到过好多次了,看来面试确实喜欢考这道题.今天,对于这个题目,我自己总结了几种方法,可能不全,大家来互相补充. 有些仅适用于字符串,方 ...

  6. java一行交换,在C / C ++,Python,PHP和Java中一行交换两个变量

    在本教程中,我们将学习如何交换不同语言的两个变量.交换意味着交换两个变量的值.让我们来看一个例子. 输入值a = 3 b = 5 输出结果a = 5 b = 3 让我们一一看. Python 我们可以 ...

  7. 在不借助中间变量的前提下,交换两个变量的值

    借助中间变量,可以很方便的交换两个变量的值.如果不借助中间变量,同样可以达到交换变量的目的. 数值相加减进行交换 int a = 10; int b = 12; a = b - a; //a = 2, ...

  8. 交换两个变量的值,不使用第三个变量的四种法方

    交换两个变量的值,不使用第三个变量的四种法方 通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换.代码如下: int a,b; a=10; b=15; int t; t=a; a= ...

  9. 函数交换两个变量java_java 编写函数 交换两个基本变量的值

    java 编写函数 交换两个基本变量的值 Java编写一个函数交换两个变量的值 Java函数在传递过程中只能够传值,不能传址.这样,函数的参数在函数内部做任何变化就都不会反映到外部调用者来.所以解决之 ...

最新文章

  1. 皮尔逊相关系数 定义+python代码实现 (与王印讨论公式)
  2. 怎么把路由的#号去掉_VLAN应用篇系列:交换机VLAN间路由与传统单臂路由(子接口)方式...
  3. django17:importlib应用中间件代码思想
  4. LeetCode 508. 出现次数最多的子树元素和(递归)
  5. C/C++ OpenCV五种滤波器综合示例
  6. 让Windows Server 2008 R2 SP1 的“网络发现”真正能发现和被发现
  7. 西瓜书读书笔记3-对数几率回归(logistic回归)公式推导
  8. bzoj 3165: [Heoi2013]Segment 线段树
  9. 漫谈 Clustering (3): Gaussian Mixture Model
  10. 遍历点击事件(屏蔽同类名的其它点击事件,防止多次请求)
  11. jmeter安装配置教程
  12. ffmpeg推拉流优化方案
  13. 使用 IDEA 的阿里插件扫描出的问题的级别
  14. Gitee + Hexo 搭建个人博客
  15. mysql navicat导入sql文件 报错 [Err] 1046 - No database selected
  16. 【面试总结】JNI层MediaScanner的分析,挥泪整理面经
  17. linux编译内核卡住,kernel启动卡住
  18. Windows命令行常用命令
  19. 禁用键盘上的某些按键
  20. Matlab处理气象数据(十)给地图添加边界线

热门文章

  1. PHP算法之四大基础算法
  2. Nuxt.js开发中碰到的问题(二)引入gitment评论系统
  3. 数据显示Windows Phone市场份额依旧十分稳定
  4. docker 与tomcat整合
  5. RHCSA笔记整理(1)
  6. 细数C++和C的差别
  7. ECSHOP 商品分类树显示商品总数的方法
  8. 静态路由与配置 知识点
  9. 统计学习方法|感知机原理剖析及实现
  10. evga x58服务器芯片组,为六核980X而生 EVGA发布X58 FTW3主板