提问人:Radoslav Khun 提问时间:5/18/2023 更新时间:5/18/2023 访问量:62
Java 中的位图/位板
Bitmaps/bitboards in Java
问:
我正在用 Java 编写一个国际象棋引擎,我想在一个称为位图或位板的变量中表示所有棋子的位置。在C++中,我会简单地使用无符号的长整型,或所谓的uint64_t。但是因为 Java 中没有无符号变量(据我所知),那么什么是有效的方法,如何实现这种方法?
我尝试了我能想到的一切
答:
3赞
Louis Wasserman
5/18/2023
#1
符号性实际上与使用数字作为位掩码并没有显著区别——至少在 Java 中是这样。
你可以使用一个刚刚好,即使它是签名的。 工程。请注意,当您向右移动面罩时,您将需要使用而不是 to。long
1L << 63
>>>
>>
请注意,如果要存储超过 64 位,则不妨使用 ,它专门设计为可根据需要缩放的位图。java.util.BitSet
评论
long
1L << 63
char
BitSet
这样的类可以在您的目标是更轻松的时候提供帮助。如果您想将内存空间保持在最低限度,最好使用有时略显笨拙的位操作。例如,请记住,java 会自动扩展到完整的 32 位 int0xFF
EnumSet
EnumMap