Bitboard 64 位机器:对于 4x4 板,我应该使用 int16 还是 int64?
Posted
技术标签:
【中文标题】Bitboard 64 位机器:对于 4x4 板,我应该使用 int16 还是 int64?【英文标题】:Bitboard 64-bit machine: should I use int16 or int64 for a 4x4 board? 【发布时间】:2021-11-07 08:45:10 【问题描述】:我正在使用 64 位机器中的位板用 C++ 编写一个 4x4 棋盘游戏。我只需要 16 位来实现该板。我应该使用:
uint16_t - 减少使用空间? uint64_t - 如果 64 位整数的运算(?)更快,我应该使用它们并在必要时用 0xFFFF(按位与)屏蔽值吗? uint_fast16_t - 我刚刚发现了这种整数类型,但我不确定它是如何工作的,是否也需要掩码?我不知道它是否有帮助,但我的处理器是:Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz 1.99 GHz
【问题讨论】:
只要使用int
,让编译器做它擅长的事情。
这取决于你打算用那块板做什么。
【参考方案1】:
如果您希望节省空间,请使用uint16_t
。
如果您希望节省时间,请使用uint_fast16_t
。
uint64_t
也可以用于使值数组在 8 字节边界处对齐。不过,这不太可能给您带来太多好处,因为它的代价是浪费了为阵列分配的 75% 的内存,以及相关的缓存性能损失。
注意:如果您的库将 uint_fast16_t
映射到 uint64_t
,您最终可能会使用与 uint64_t
相同的类型。
【讨论】:
为了安全起见 uint_fast16_t,我应该在左移时屏蔽数字吗?编辑:以防我以后做右移。 @Hydrametr0nice 这是正确的。系统不会自动将您想要保留的 16 位之外的最高有效位清零,因此如果您稍后将值右移,这些位将被移回您的值。您可能希望推迟屏蔽高位,直到您进行正确的移位。以上是关于Bitboard 64 位机器:对于 4x4 板,我应该使用 int16 还是 int64?的主要内容,如果未能解决你的问题,请参考以下文章
迅为iTOP-2K1000开发板龙芯中科国产64位Loognix系统工业核心主板