本帖最后由 汤权 于 2016-9-23 11:25 编辑
首先算法是白版的,我之前做了一个自己的简单的嵌入式操作系统,就是使用查找位1的位置来进行任务调度的,一开始使用查找表法,这种方法定位速度很快,但是占用很多空间。后来想用循环的方式查找最高有效的bit1位,但是效率不高。有幸看见白版的查找0bit的方法,我就稍加修改了一下,写了一个最高有效bit1查找,可以用在我的小的系统里面了。在此感谢白版的启发
@白丁
int bit1search(unsigned int data)
{
int pos = 0;
if((data | 0x0000ffff) != 0x0000ffff)
{
data >>= 16;
pos += 16;
}
if((data | 0x000000ff) != 0x000000ff)
{
data >>= 8;
pos += 8;
}
if((data | 0x0000000f) != 0x0000000f)
{
data >>= 4;
pos += 4;
}
if((data | 0x00000003) != 0x00000003)
{
data >>= 2;
pos += 2;
}
if((data | 0x00000001) != 0x00000001)
{
data >>= 1;
pos += 1;
}
return pos;
}
int bit1search_for(unsigned int data)
{
int pos = 0,i;
for(i=0;i<32;i++)
{
if(data & (1 << i))
pos = i;
}
return pos;
}
程序很简单,也是使用二分法的,整体效率比循环稳定。第二个函数是用来测试第一个函数是不是对的,当然结果是对的。。。