为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
Smart猫小萌 2019-09-24 10:54:40
我有一个位数组实现,其中第0个索引是数组中第一个字节的MSB,第8个索引是第二个字节的MSB,依此类推。找到该位阵列中设置的第一位的快速方法是什么?我查找的所有相关解决方案都找到了最低有效位,但是我需要最高有效位。因此,给定0x00A1,我想要8(因为它是左起的第9位)。
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

作为一名性能痴迷者,我尝试了许多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];

}


查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 715 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信