大家都知道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位。
对高位赋值与其相反。
流转的时光,都成为命途中美丽的点缀,