2的幂和按位与&——效率

Posted yangguang-it

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2的幂和按位与&——效率相关的知识,希望对你有一定的参考价值。

以前学生时代,只是完成功能就行,进入公司之后,由于产品的特殊性,需要非常考虑效率,发现有以下几个策略(该文不定时更新):
hash%length==hash&(length-1)的前提是length是2的n次方
当 B满足是2的n次方时,有 A%B == A & (B-1)
使用后者的效率比求余操作高,在对效率要求高的场合,建议使用后者(我目前的应用场景主要是两个,hash桶和ring队列)。
当B满足是2的n次方时, (A + B-1) &  (~(B-1))的结果会是2的n次方,且是向后扩展A的,即表达式结果大于等于A的值,但是保证了是2的n次方。使用这个操作,可以提高malloc的效率,尤其是动态变化的数据结构(ring_buff、ring_queue)时(这个主要用于malloc开辟内存时)。

 

以上是关于2的幂和按位与&——效率的主要内容,如果未能解决你的问题,请参考以下文章

按位与&按位或|按位异或^

按位与或异或运算

按位与,按位或,按位异或,按位取反

位运算(按位与按位或异或)

位运算(按位与按位或异或)

按位与的技巧