__builtin_ffs(x) 作用: 返回x中最后一个为1的位是从后向前的第几位
实现源码如下:
#include <stdio.h>
int custom_ffs(unsigned int x)
{
if (x == 0){
return 0;
}
int num = 1;
if ((x & 0xffff) == 0) {
num += 16;
x >>= 16;
}
if ((x & 0xff) == 0) {
num += 8;
x >>= 8;
}
if ((x & 0xf) == 0) {
num += 4;
x >>= 4;
}
if ((x & 0x3) == 0) {
num += 2;
x >>= 2;
}
if ((x & 0x1) == 0){
num += 1;
}
return num;
}
int main(int argc,char* argv[]){
unsigned long a = 0x8000000;
printf("----%d\n",custom_ffs(a));
printf("----%d\n",__builtin_ffs(a));
}
算法思路是二分查找,先查找前16位是否为空,若为空则右移16,查找剩下的16位。一直二分下去,直到找到第1个1.
版权声明:本文为wishes2018原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。