【问题标题】:Use a std::bitset or a fundamental type of the same size?使用 std::bitset 或相同大小的基本类型?
【发布时间】:2015-11-01 04:06:22
【问题描述】:

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

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

【问题讨论】:

    标签: c++ bit-manipulation std-bitset


    【解决方案1】:

    uint64_t 可能。你会想要执行std::bitset 上不可用的操作,包括几乎所有的算术运算、位扫描、使用部分板作为数组的索引,以及 SSE 内在函数,如果你认真的话。

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

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

    【讨论】:

    • 你提出了一些好观点。尽管至少在 Visual Studio 中,uint64_tunsigned long long 的 typedef,所以当使用 uint64_t 时,即使提高了读者的可读性和理解力,它对编译器或 CPU 也没有影响。
    • 固定宽度的类型确实是为了可读性和理解性......更不用说这样你就知道你在处理什么了。当您需要 64 位类型时,为什么要选择 unsigned long long 而不是 uint64_t
    猜你喜欢
    • 2020-01-13
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 2012-11-10
    • 2015-09-01
    相关资源
    最近更新 更多