机器指令clz的C实现

clz:查找一个数据x前置0的个数。

 

/**
 * 二分查找1的位置
 */
int clzInC(unsigned int x)
{
  if (!x) return 32;
  int e = 31;
  //1111 1111 1111 1111 0000 0000 0000 0000
  if (x&0xFFFF0000)   { e -=16; x >>=16; }
  //0000 0000 0000 0000 1111 1111 0000 0000
  if (x&0x0000FF00)   { e -= 8; x >>= 8; }
  //0000 0000 0000 0000 0000 0000 1111 0000
  if (x&0x000000F0)   { e -= 4; x >>= 4; }
  //0000 0000 0000 0000 0000 0000 0000 1100
  if (x&0x0000000C)   { e -= 2; x >>= 2; }
  //0000 0000 0000 0000 0000 0000 0000 0010
  if (x&0x00000002)   { e -= 1; }
  return e;
}

你可能感兴趣的:(读书笔记,计算机算法)