《深入理解计算机系统》第二章
一、布尔代数和环
利用^(异或)的环属性实现变量的交换。
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">汇编代码 写道
页:
[1]