1

我正在创建一个国际象棋求解器并决定使用位板。方便的是,标准棋盘上有 64 个方格。这很好,因为 64 位操作系统的流行,单个位板可以装入单个寄存器。

也就是说,在使用 astd::bitset<64>和其中的函数或“相同”大小的基本类型unsigned long long和手动执行位旋转时是否存在根本差异(大小(内存和代码)、速度、复杂性、内存使用等)?

4

1 回答 1

4

uint64_t大概。您将想要执行在 上不可用的操作std::bitset,包括几乎所有的算术运算、位扫描、使用部分电路板作为数组的索引,以及 SSE 内在函数(如果您认真对待的话)。

例如(无论如何都不是详尽的列表,只是一些简单的示例)在o^(o-2r)(及其表亲)中,更高级的双曲线精粹,作为提取最低设置位的一部分等。

您可以使用std::bitset,但您会经常将其转换回某种类型的整数。

于 2015-08-08T22:57:15.057 回答