RT,比如输入10返回16, 输入24返回32,等等.
注意,是使用位操作且没有循环,也不用表驱动等等.因为这个操作要经常进行,要保证高效,所以不能使用循环(别跟我说用递归,熟悉算法和计算机本质的人都知道递归和循环本质是一样的:);同时,因为不知道需要计算的数据到底有多大,采用表驱动的办法也不可行.
我在网上
发帖,最终得到了一个很BT的答案:
int fun(int v)
{
float f = (float)(v - 1);
return 1 << ((*(unsigned int*)(&f) >> 23) - 126);
}
但是我不知道这个算法的原理是什么,貌似采用了浮点数格式的一些特性,知道的同学请给我一个详尽的解释,在这里先感谢了.