Linux源码学习之位移赋值

大家都知道Linux以高效快速著名,内核代码很多地方都能体现这种高效的设计思想。

最近阅读就发现,代码很多地方使用一个数的高、低位分别表示不同的内容,以及位移来赋值。

好处是,一方面,通过一个高、低位表示不同的内容可在运行的时候少的使用稀缺的内存空间,另一方面,大家都晓得在CPU中位移计算相对比其他计算快的。虽然这些细节都很小,但是注意细节,每个细节都做好才能做出最优秀、流畅的产品。

针对位移对数值高、低位赋值,进行了简单的测试。

 程序的用意是把nNum = 5865赋值到nTest的低24位中。高位值不变,从而实现对一个值的高低位表示不同值的赋值。

<span style="font-size:18px;">#define SHIFT 24int main(int argc, char* argv[]){unsigned long nTest = 79544654;//100101111011100000101001110unsigned long  nNum = 5865;    //000000000000001011011101001nTest = nTest>>SHIFT;printf(">> %u\n", nTest);      //000000000000000000000000100nTest = (nTest<<SHIFT) |nNum;  //100000000000001011011101001printf("<< %u\n", nTest);return 0;}</span>

79544654右移24位再左移动,相当于把低24位清零,然后与nNum进行按位或,即将Numd值赋予nTest的低24位。

对高位赋值与其相反。



流转的时光,都成为命途中美丽的点缀,

Linux源码学习之位移赋值

相关文章:

你感兴趣的文章:

标签云: