使用 std::bitset 或相同大小的基本类型?

Use a std::bitset or a fundamental type of the same size?

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

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

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

例如o^(o-2r) (and its cousin中的(无论如何都不是详尽的列表,只是一些简单的例子)),更高级的双曲线精华,作为提取最低集合位的一部分等

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