我正在寻找一种有效的方法来确定在整数中设置的最低有效位的位置,例如对于0x0FF0,它将是4.
这是一个简单的实现:
unsigned GetLowestBitPos(unsigned value)
{
assert(value != 0); // handled separately
unsigned pos = 0;
while (!(value & 1))
{
value >>= 1;
++pos;
}
return pos;
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何挤出一些周期?
(注意:这个问题适合喜欢这类事情的人,而不是人们告诉我xyzoptimization是邪恶的.)
[编辑] 感谢大家的想法!我也学到了其他一些东西.凉!
是否有一种有效的方法来查找数字的log2,假设它是2的幂.我知道明显的方法,如有一张桌子或
for (log2=0;x!=1;x>>=1,log2++);
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更有效/更优雅的方式.
给定unsigned int,我必须执行以下操作:
(该操作不应该是架构依赖).
我已经使用按位移位完成了这个,但我必须迭代几乎所有的位(es.32).例如,计算1:
unsigned int number= ...;
while(number != 0){
if ((number & 0x01) != 0)
++count;
number >>=1;
}
Run Code Online (Sandbox Code Playgroud)
其他操作类似.
所以我的问题是:有没有更快的方法呢?