int first_bit64(uint64_t x)
{
x = (x ^ (x - 1)) >> 1;
x = x - ((x >> 1) & 0x5555555555555555);
x = (x & 0x3333333333333333) + ((x >> 2) & 0x3333333333333333);
x = (x + (x >> 4)) & 0x0f0f0f0f0f0f0f0f;
return ((x * 0x0101010101010101) >> 56);
}
本文介绍了一个用于确定64位无符号整数中第一个非零比特位置的算法实现。通过位操作和逻辑运算,该算法高效地计算出从高位到低位的第一个1的位置。适用于需要快速定位比特位的应用场景。
int first_bit64(uint64_t x)
{
x = (x ^ (x - 1)) >> 1;
x = x - ((x >> 1) & 0x5555555555555555);
x = (x & 0x3333333333333333) + ((x >> 2) & 0x3333333333333333);
x = (x + (x >> 4)) & 0x0f0f0f0f0f0f0f0f;
return ((x * 0x0101010101010101) >> 56);
}

被折叠的 条评论
为什么被折叠?