首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
用异或来交换两个变量能提高速度是错误的
时间:
2015-03-19 22:03:33
阅读:
94
评论:
0
收藏:
0
[点我收藏+]
标签:
c
在进行两个变量的时候,经常会看到有些书误人子弟的推荐使用异或的方式:
方式一
{
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技术,编译技术,操作系统等等,都会让看似可行的技术,失效。
在优化前,通过实际的运行确定影响性能的代码,然后进行优化。
最后,从软件工程的角度看,代码是写给人看的。最容易理解的代码,被维护的代价也最小,方式二的代码更容易阅读。
结语:
编译器很强大,CPU技术进步很快,我们的经验积累反而是最慢的。多反思,多总结。
附注:
如果要作为面试题,交换一个32位无符号整形数的方案,倒是更可以考虑一下采用位运算的方式解决。
用异或来交换两个变量能提高速度是错误的
标签:
c
原文地址:http://blog.csdn.net/tietao/article/details/44464781
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!