今天网上看到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;
}