Jas*_*n S 31
四舍五入到下一个更强大的力量:看看有点笨拙的黑客.
在C:
unsigned int v; // compute the next highest power of 2 of 32-bit v
v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;
Run Code Online (Sandbox Code Playgroud)
Ank*_*sal 17
我认为你的意思是接近2 ^ n的数字.您可以登录模式2,然后确定其中的下一个整数值.
对于java,可以这样做:
Math.ceil(Math.log(x)/Math.log(2))
Run Code Online (Sandbox Code Playgroud)
您的要求有点混乱,最接近的2到5的幂是4.如果您想要的是从数字开始的2的下一个幂,那么下面的Mathematica表达式可以满足您的需求:
2^Ceiling[Log[2, 5]] => 8
Run Code Online (Sandbox Code Playgroud)
从中可以直截了当地找出大多数编程语言中的单线程.
对于给定整数的下一个二的幂x
2^(int(log(x-1,2))+1)
或者(如果您没有log
接受基本参数的函数
2^(int(log(x-1)/log(2))+1)
请注意,这不适用于 x < 2
由于问题的标题是“四舍五入到最接近的2”,因此我认为也包括解决该问题的方法将很有用。
int nearestPowerOfTwo(int n)
{
int v = n;
v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++; // next power of 2
int x = v >> 1; // previous power of 2
return (v - n) > (n - x) ? x : v;
}
Run Code Online (Sandbox Code Playgroud)
它基本上会找到前一个和下一个2的幂,然后返回最接近的1。