对于算术工具中的热循环,我需要在将结构元素的最低位的索引保持在内存中或在必要时查找它之间进行权衡。将它保存在记忆中但却很笨重。放弃这个领域受限于我能做多快的速度;
inline bool operator< (const unsigned long& lhs, const unsigned long& rhs) {
unsigned long left, right;
_BitScanForward(&left , lhs);
_BitScanForward(&right, rhs);
return left < right;
}
(简体)。所以2 < 4
,但2 == 6
。我想知道是否有更简单的方法来提取此信息。
答案 0 :(得分:1)
如果索引较小,那么索引的功率也会减少两个(反之亦然)。因此,您可以提取它并按幅度而不是索引来比较最低位:
lsleft = lhs & -lhs;
lsright = rhs & -rhs;
return lsleft < lsright;
作为奖励,如果输入为零,这也不会死亡。