C++ 与最低位集进行比较

C++ compare against lowest bit set

对于算术工具中的热循环,我需要在将结构元素的最低位索引保留在内存中或在必要时查找它之间做出权衡。将它保存在内存中是可行的,但很笨重。删除字段受限于我执行此操作的速度;

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。我想知道是否有更简单的方法来提取此信息。

如果索引少,则索引的2次方也少(反之亦然)。所以你可以提取它并按幅度而不是索引比较最低位:

lsleft = lhs & -lhs;
lsright = rhs & -rhs;
return lsleft < lsright;

作为奖励,如果输入为零,这也不会消失。