【问题标题】:Bitboard 64-bit machine: should I use int16 or int64 for a 4x4 board?Bitboard 64 位机器:对于 4x4 板,我应该使用 int16 还是 int64?
【发布时间】: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,让编译器做它擅长的事情。
  • 这取决于你打算用那块板做什么。

标签: performance 64-bit 32bit-64bit 16-bit bitboard


【解决方案1】:
  • 如果您希望节省空间,请使用uint16_t
  • 如果您希望节省时间,请使用uint_fast16_t
  • uint64_t 也可以用于使值数组在 8 字节边界处对齐。不过,这不太可能给您带来太多好处,因为它的代价是浪费了为阵列分配的 75% 的内存,以及相关的缓存性能损失。

注意:如果您的库将 uint_fast16_t 映射到 uint64_t,您最终可能会使用与 uint64_t 相同的类型。

【讨论】:

  • 为了安全起见 uint_fast16_t,我应该在左移时屏蔽数字吗?编辑:以防我以后做右移。
  • @Hydrametr0nice 这是正确的。系统不会自动将您想要保留的 16 位之外的最高有效位清零,因此如果您稍后将值右移,这些位将被移回您的值。您可能希望推迟屏蔽高位,直到您进行正确的移位。
猜你喜欢
  • 2019-01-12
  • 2012-05-26
  • 1970-01-01
  • 2011-03-08
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 2011-10-25
相关资源
最近更新 更多