【发布时间】:2017-11-27 17:12:44
【问题描述】:
我正在尝试制作一个国际象棋引擎。我做了一些阅读,似乎使用 64 位数字来表示板是要走的路。但是我有点困惑,似乎没有简单的方法可以用二进制写一个数字,而且我也找不到在数字中选择一个数字的方法。例如,如果我这样做
int aNum = 356;
b = aNum[1];
有没有办法让我可以将 b 设置为 5?在程序中它是一个二进制数,如 1001010101,我想知道当我经过那里时所有 1 都在哪里。例如,如果我有一辆汽车并且我正在寻找可能的向右移动,我会让它遍历数字直到找到 1。
希望这很容易理解,谢谢!
问题在于对为何在国际象棋引擎中使用 64 位数字存在根本性的误解。实际上,这样做的好处是,如果您想检查方块上的项目,您可以执行类似boardRep & 1 之类的操作,它将检查棋盘的第一个方块上的元素。
【问题讨论】:
-
我不确定 64 位数字是否有意义。每个方块可以包含六块中的任何一块(任何一种颜色),或者是空的。每个二进制数字代表什么?
-
"遍历数字直到找到 1" - 这相当简单,使用几个按位操作(例如,
>>和|)。 -
我真的建议您忘记这些微优化并寻求有意义的表示。例如 8x8 数组,其中包含代表棋子的数字。也许更复杂的东西。
-
据我所知,bitboards 绝对是国际象棋编程中的一员。您可能会发现这个chess programming website 是一个有用的资源。
-
位板的力量来自于不对位进行迭代。重点在于启用大部分避免此类循环的技巧。
标签: c binary bit-manipulation chess