我正在寻找一种有效的方法来确定以整数设置的最低有效位的位置,例如对于 0x0FF0,它将是 4。
一个简单的实现是这样的:
unsigned GetLowestBitPos(unsigned value)
{
assert(value != 0); // handled separately
unsigned pos = 0;
while (!(value & 1))
{
value >>= 1;
++pos;
}
return pos;
}
任何想法如何挤出一些周期?
(注意:这个问题是给喜欢这些东西的人准备的,而不是让人们告诉我 xyzoptimization 是邪恶的。)
[编辑] 感谢大家的想法!我也学到了一些其他的东西。凉爽的!
原文由 peterchen 发布,翻译遵循 CC BY-SA 4.0 许可协议
Bit Twiddling Hacks 提供了一个很好的,呃,bit twiddling hacks 的集合,并附有性能/优化讨论。对于您的问题,我最喜欢的解决方案(来自该站点)是«乘法和查找»:
有用的参考资料: