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

时间:2015-08-30 22:19:03

标签: c++ optimization

我正在编写一个桌面游戏引擎,我写了一个 10x10 位板类。该类包含两个 uint64&#39>的数组,并实现各种位操作。我尚未实施的一项重要操作是lsb()。我知道我可以对第一个整数执行lsb(),如果它 0 就可以在第二个整数上执行lsb()。但是,检查它是否 0 似乎是多余的。实施char s = lsb64(b_[0]); if (s == 0 && b_[1] != 0) { s = lsb64(b_[1]) + 64; } return s; 的最有效方法是什么?

编辑: 我目前的代码是:

/Users/svp/mytweak/theos/bin/logos.pl line 364.

lsb64()这里返回1 +位的索引

我可以提高性能吗?注意if条件几乎总是假的。

1 个答案:

答案 0 :(得分:0)

如果您希望大多数输入将位设置为低64位,则必须分析执行情况。以下内容可避免两次lsb64次呼叫。

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

可以在related question中找到lsb64的可能解决方案。