六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 30|回复: 0

《深入理解计算机系统》第二章

[复制链接]

升级  1.6%

154

主题

154

主题

154

主题

进士

Rank: 4

积分
508
 楼主| 发表于 2013-1-28 19:44:27 | 显示全部楼层 |阅读模式
 
一、布尔代数和环
利用^(异或)的环属性实现变量的交换。
void inplace_swap(int *x, int *y){      *x = *x ^ *y;      *y = *x ^ *y;      *x = *x ^ *y;} 正如上面这段程序,看上去是来来回回的同样一种运算甚至连运算数都一样。但是就是这样三行代码达到了交换x和y指向的数据值的效果。
让我们来简单分析一下这个程序的具体过程吧:
步骤*x*y
初始ab
第一步a^bb
第二步a^ba^b^b=a^0=a
第三步a^b^a=a^a^b=0^b=ba
 
 
 
 
 
 
 
 
 
不错这样看来,这个程序从表象三看好像是省去了一个空间,但是从汇编码等底层实现上看没有任何性能上的优势。下面我们看看这段代码的汇编码:
 
<div class="quote_title">汇编代码 写道
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表