现在的位置: 首页 > 综合 > 正文

求取32位无符号整数中最低位位值位1的位置

2012年10月08日 ⁄ 综合 ⁄ 共 572字 ⁄ 字号 评论关闭

      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;

}

抱歉!评论已关闭.