我有一个位数组实现,其中第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];
}
- 3 回答
- 0 关注
- 765 浏览
添加回答
举报
0/150
提交
取消