0

我认为这个问题还没有被问到。

问题是,在国际象棋中,我们使用位板来加快移动生成周期,方法是用 bit=1 表示位置,用 bit=0 表示其他位置。在国际象棋中,我们有 8*8 个位置。结合现代 CPU,最推荐在无符号 64 位整数中实现这一点。在 c++ 中,我们可以使用一个无符号的 64 位地址 int64_t 并将其分配如下: 0b00000000_00000001_00000001_00000001_00000001_00000001_00000001_00000001

然而,我的问题是,我们将如何在 kotlin 中做到这一点。由于 kotlin 继承了 java 数据类型,我们不能有一个无符号的 64 位位板,只有 63 位,这对于国际象棋来说是不够的。例如。

val whiteInit = 0b11111111_11111111_00000000_00000000_00000000_00000000_00000000_00000000L // cant dos this (=>out of range)
val blackInit = 0b00000000_00000000_00000000_00000000_00000000_00000000_11111111_11111111L // this works

我不想让事情变得更糟并在不同的数组中拆分行,就像我读过几次一样,因为它丑陋并且可能没有那么快。

因此,偶然发现了“kotlin-stdlib / kotlin / Experimental”中的 ULong 数据类型,到目前为止,我所写的内容看起来很有希望。所以,首先感谢您阅读到这里,其次,这是要走的路还是我错过了更好的东西?

4

1 回答 1

0

对于位板,您关心的是 64 位,但不关心解释为数字。Long因此,除非我遗漏了某些东西(Double如果为它定义了按位运算也会如此) ,否则a也会做得很好。或者您可以使用java.util.BitSet,尽管它可能会更慢。

于 2020-07-03T17:33:38.113 回答