写一段函数,计算无符号32位整数从高到低,第一个‘1’的位置。(例如,0x0F000000的第一个‘1’的位置为5)

来源:互联网 发布:易语言钩子注入源码 编辑:程序博客网 时间:2024/06/02 05:29

使用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;}