__builtin_ffs 实现原理

__builtin_ffs(x) 作用: 返回x中最后一个为1的位是从后向前的第几位
实现源码如下:

#include 

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.

你可能感兴趣的:(编程语言)