二分查找
#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;
}
本文详细介绍了一段C语言实现的二分查找函数,用于快速找到十六进制数据中'1'首次出现的位置。通过逐位与操作判断并左移数据,展示了在不同位移情况下的计数。测试代码演示了如何使用该函数。
4227

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



