"biginteger"类的有效最低有效设置位



我正在编写一个桌面游戏引擎,我编写了一个10x10位板类。该类持有一个包含两个uint64 的数组,并实现各种位操作。我还没有实现的一个重要操作是lsb()。我知道我可以在第一个整数上做lsb()如果它是0就在第二个整数上做。然而,检查它是否为0似乎是多余的。实现lsb()最有效的方法是什么?

编辑:我现在的代码是:

char s = lsb64(b_[0]);
if (s == 0 && b_[1] != 0) {
    s = lsb64(b_[1]) + 64;
}
return s;

lsb64()这里返回1 +位

的索引

我可以改进性能吗?注意if条件几乎总是为假。

如果您希望大多数输入将位设置在较低的64位,则必须对执行进行分析。下面避免了两次lsb64调用。

return b_[0] ? lsb64(b_[0]) : (b_[1] ? 64 + lsb64(b_[1]) : 0);

lsb64的可能解决方案可以在相关问题中找到。

最新更新