3 int bit_pos(unsigned int n)
4 {
5 n = n & (-n);
6 n = n - 1;
7 n = n - ((n>>1)&0x77777777) - ((n>>2)&0x33333333)-((n>>3)&0x11111111);
8 n = (n + (n>>4))&0xf0f0f0f;
9 n = n + ((n >> 8)& 0xf) + ((n >> 16)& 0xf) + ((n >> 24)& 0xf);
10 n = n & 0xff;
11 return n;
12 }
注:输入为0时返回值位32
uint lowest_one_idx(uint x)
{
uint r = 0;
x &= ~x;
if(x & 0xffff0000)
r += 16;
if(x & 0xff00ff00)
r += 8;
if(x & 0xf0f0f0f0)
r += 4;
if(x &0xcccccccc)
r += 2;
if(x & 0xaaaaaaaa)
r += 1;
return r;
}