What is the fastest/most efficient way to find the highest set bit (msb) in an integer in C?

后端 未结 27 2734
终归单人心
终归单人心 2020-11-22 03:35

If I have some integer n, and I want to know the position of the most significant bit (that is, if the least significant bit is on the right, I want to know the position of

27条回答
  •  情歌与酒
    2020-11-22 04:10

    Expanding on Josh's benchmark... one can improve the clz as follows

    /***************** clz2 ********************/
    
    #define NUM_OF_HIGHESTBITclz2(a) ((a)                              \
                      ? (((1U) << (sizeof(unsigned)*8-1)) >> __builtin_clz(a)) \
                      : 0)
    

    Regarding the asm: note that there are bsr and bsrl (this is the "long" version). the normal one might be a bit faster.

提交回复
热议问题