前言
最近在看《深入理解计算机系统》,学习到了一个高效转换程序中两个变量的方法,分享出来
众所周知的转换两个变量的方式是引入第三个变量,来实现转换的功能,类似下面的伪代码
int a = ...;
int b = ...;
// 转换a,b变量,引入变量c
int c = a;
a = b;
b = c;
书中介绍了一中高效转换的方式利用了位运算
我们知道指针(或引用)a, b指向的位置的值
本质上也是一个二进制数值
,而位运算中有一个重要的异或运算
: ^
所谓异或运算,即两个位不同时为真,相同即为假
且对于任一位向量a,有a^a = 0,利用这一属性,就可以完成高效互换变量a,b
下面是伪代码:
inplaceSwap(int a, int b){
b = a ^ b;
a = a ^ b;// b
b = a ^ b;// a
}
总结
随着编程的年限增加,越需要掌握好底层计算机知识,加油
网友评论