查找在位数组中设置的最高有效位(最左侧)

我有一个位数组实现,其中第0个索引是数组中第一个字节的MSB,第8个索引是第二个字节的MSB,依此类推。

找到该位阵列中设置的第一位的快速方法是什么?我查找的所有相关解决方案都找到了最低有效位,但是我需要最高有效位。因此,给定0x00A1,我想要8(因为它是左起的第9位)。


Smart猫小萌
浏览 724回答 3
3回答

忽然笑

作为一名性能痴迷者,我尝试了许多MSB集的变体,以下是我遇到的最快的方法,unsigned int msb32(unsigned int x){    static const unsigned int bval[] =    {0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4};    unsigned int r = 0;    if (x & 0xFFFF0000) { r += 16/1; x >>= 16/1; }    if (x & 0x0000FF00) { r += 16/2; x >>= 16/2; }    if (x & 0x000000F0) { r += 16/4; x >>= 16/4; }    return r + bval[x];}
打开App,查看更多内容
随时随地看视频慕课网APP