找到2的幂的最快方法是什么,使用一定数量(即2的幂)?
我对数学不是很熟练,所以我不确定如何最好地描述它.但功能将类似于x = 2^y这里y是输出,并且x是输入.这是一个真实表,如果有助于解释它的外观.
0 = f(1)
1 = f(2)
2 = f(4)
3 = f(8)
...
8 = f(256)
9 = f(512)
Run Code Online (Sandbox Code Playgroud)
我已经做了一个这样做的功能,但我担心它不是很有效(或者说优雅).这样做会有更简单,更有效的方法吗?我正在使用它来计算纹理的哪个区域用于缓冲绘制的完成方式,因此每个绘制的对象至少调用一次.这是我到目前为止所做的功能:
uint32 getThePowerOfTwo(uint32 value){
for(uint32 n = 0; n < 32; ++n){
if(value <= (1 << n)){
return n;
}
}
return 32; // should never be called
}
Run Code Online (Sandbox Code Playgroud) 是否有一种有效的方法来查找数字的log2,假设它是2的幂.我知道明显的方法,如有一张桌子或
for (log2=0;x!=1;x>>=1,log2++);
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更有效/更优雅的方式.
如何在二进制数中找到尾随0的数量?基于K&R bitcount在二进制数中找到1的示例我修改了一下以找到尾随0.
int bitcount(unsigned x)
{
int b;
for(b=0;x!=0;x>>=1)
{
if(x&01)
break;
else
b++;
}
Run Code Online (Sandbox Code Playgroud)
我想回顾一下这种方法.