我正在编写一个桌面游戏引擎,我编写了一个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
的可能解决方案可以在相关问题中找到。