今天网上看到2个这样的算法,感觉很简洁,效率也很高,就收藏了,但有些原理还不是很理解
方法1:
int fun(int v)
{
float f = (float)(v - 1);
return 1 << ((*(unsigned int*)(&f) >> 23) - 126);
}
方法2:
inline int fun(int x) { x |= (x >> 1); x |= (x >> 2); x |= (x >> 4); x |= (x >> 8); x |= (x >> 16); return x+1; }