使用std::bitset或相同大小的基本类型
Use a std::bitset or a fundamental type of the same size?
我正在创建一个国际象棋求解器,并决定使用位板。一个标准的棋盘上有64个方格。这很好,因为64位操作系统的普及,单个位板可以放入单个寄存器中。
也就是说,使用std::bitset<64>
及其功能或"相同"大小的unsigned long long
的基本类型并手动执行位旋转是否存在根本差异(大小(内存和代码),速度,复杂性,内存使用等)?
可能是uint64_t
。您将想要执行在std::bitset
上不可用的操作,包括几乎所有的算术操作,位扫描,使用部分板作为数组的索引,以及SSE本质,如果您认真对待它的话。
例如(无论如何不是一个详尽的列表,只是一些简单的例子)在o^(o-2r)(和它的近亲)中,更高级的双曲线Quintessence,作为提取最低集位的一部分,等等。
你可以使用std::bitset
,但你会把它转换回某种类型的整数。
相关文章:
- 从类型std::函数传递变量失败,尽管调用方期望的类型完全相同
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 错误:无法传递非平凡类型"std::string"的对象和更多错误
- 与'operator<<'不匹配(操作数类型'std::ostream {aka std::basic_ostream<char>}'
- std::函数指针错误:无法将 &A::a 转换为类型 std::function<>&&
- 包括<字符串>,使用不完整的类型"std::string"
- 与"operator<<"不匹配(操作数类型'std::ostream'
- 错误:类型"std::__1::basic_string<char>"不提供呼叫运算符
- 错误:请求从"Mstream"转换为非标量类型"std::string {aka std::basic_string<char>}"
- 错误:移动文件时'QString'为非标量类型"std::__cxx11::字符串"
- CLion 无法解析类型 std::unordered_map,即使它提示我包含标头并且编译工作
- 字符串C :libc abi.dylib:终止未被发现的类型std :: out_of_range:basic
- 返回类型 std::optional<std::variant<...>>
- 变量具有不完整的类型std :: String;string.h有很多错误
- 对类型 'A *' 的非常量左值引用不能绑定到不相关的类型 'std::shared_ptr<A>' 的值
- 来自类型为std::basic_string::const_iterator的非常量引用的无效初始化,并且<char>来自类型std::basic_string<char>::
- 类型"std::array<char,6>"和"char"不兼容
- 此错误的含义是什么:从 'char* [40] 转换为非标量类型 'std::string
- 使用 TypedEq() 匹配类型 std::vector<std::vector>
- 如何修复错误:请求从"void"转换为非标量类型"std::vector<int>"