题1.  给定一个无符号整型数据(unsigned int),找出其对应二进制数据中bit位为1的最高/低索引。

  比如:对于数据0,返回0;数据1,返回1;数据0x80000000,返回32;

题2.  给定一个无符号64bit整型数据(unsigned long long int),找出其对应二进制数据中bit位为1的最高/低索引。

  比如:对于数据0,返回0;数据1,返回1;数据0x4000000000000000,返回63;  

题3.  给定一个无符号长整型数据(unsigned long int),找出其对应二进制数据中bit位为1的最高/低索引。

>对于题1:

/*
  方法一:二分法
*/
int fls(unsigned int x)
{
int r=;
if(!x)
return ;
if(!(x&0xffff0000u)){
x<<=;
r-=;
}
if(!(x&0xff000000u)){
x<<=;
r-=;
}
if(!(x&0xf0000000UL)){
x<<=;
r-=;
}
if(!(x&0xc0000000UL)){
x<<=;
r-=;
}
if(!(x&0x80000000UL)){
x<<=;
r-=;
}
return r;
}
/*
  方法二:遍历法
*/
int fls(unsigned int x)
{
    int i,pos=0;
    for(i=1;i<=32;++i){
        if(x&0x1)
            pos=i;
        x>>=1;
    }
    return pos;
}

>对于题2:

  unsigned long long int为64bit数据,借助题1实现

int fls_64(unsigned long long int x)
{
unsigned int _x= x>>;
if(_x)
return fls(_x)+;
return fls(x);
}

>对于题3:

  由于unsigned long int类型的size会根据编译器的不同而不同,所以应该考虑无符号长整型为8byte和4byte的情况。总和题1/2

int fls_long(unsigned long int x)
{
    if (sizeof(x) == 4)
        return fls(x);
    return fls_64(x);
}

欢迎大家批评指正  |;-)

05-11 09:39
查看更多