好记性不如铅笔头

C && C++, 编程

Cjson中pow2gt函数简单分析

最近看了下cjson,发现里面有个比较好玩的函数

static int pow2gt (int x)
{	--x;	x|=x>>1;	x|=x>>2;	x|=x>>4;	x|=x>>8;	x|=x>>16;	return x+1;	}

该函数的作用是返回比x大的最小的2的N次方数。

那么具体是如何实现的呢?我在网上搜了下,发现大家都没有太关注。那么我这里简单的画个图,来描述下为什么是这种结果吧。

可以看到,考虑到int是32位,那么对于任何一个M,当它执行完上图中的5步操作后,M的最左边为1的那位向右全部被赋值为1,因此,在最后return x+1 时,就会返回比M大的最小的2的N次方数。而最开始的–x,是因为当x本身就是一个2的N次方数时,需要减1来保证正确性。

发表评论

6 − 1 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据