使用2分查找的方法解决,从左到右查找“1”的位置。
#include <stdio.h>
int func(unsigned int data)
{
int pos = 1; //用于计数,计录第一个“1”的位置
if((data & 0xffff0000) == 0) //如果data与高16位相与后为零,表示data高16位中不含有“1”
{
data <<= 16; //将data左移16位,去除高16位
pos += 16; //pos加16,表示前16位中不含有数字“1”
}
if((data & 0xFF000000) == 0)
{
data <<= 8;
pos += 8;
}
if((data & 0xF0000000) == 0)
{
data <<= 4;
pos += 4;
}
if((data & 0xC0000000) == 0)
{
data <<= 2;
pos += 2;
}
if((data & 0x80000000) == 0)
{
data <<= 1;
pos += 1;
}
return pos;
}
int main(void) //测试代码
{
printf("the pos =%d.\n",func(0xffffffff));
printf("the pos =%d.\n",func(0x00000001));
return 0;
}