从二维位数组中提取位

时间:2017-11-15 17:11:30

标签: c# arrays artificial-intelligence bitwise-operators bits

对于Minimax-Algorithm I代码,我想尝试逐位运算以加快速度。每个游戏状态都保存为UInt128,并描述了一个基于4x4磁贴的电路板。每个磁贴的值可以是0到32(不包括),因此每个磁贴5位。

+-------+-------+-------+-------+
| 0-4   | 5-9   | 10-14 | 15-19 |
+-------+-------+-------+-------+
| 20-24 | 25-29 | 30-34 | 35-39 |
+-------+-------+-------+-------+
| 40-44 | 45-49 | 50-54 | 55-59 |
+-------+-------+-------+-------+
| 60-64 | 65-69 | 70-74 | 75-79 |
+-------+-------+-------+-------+

为了在电路板上实际执行操作,我需要根据3x3的中心从4x4中提取3x3块。我该怎么做呢?我通过比特移动简单地对每个单元进行手动操作都没有问题,但我想知道是否有更快的方法。

提前致谢!

(语言是重要的C#)

1 个答案:

答案 0 :(得分:2)

比特操作非常快。由于您使用位移手动完成操作已经没有问题,因此请复制4x4并将其缩小为3x3,然后对其执行操作,并查看是否存在性能问题。

如果您正在执行'操作'意味着只读,取决于直接访问4x4中的位与复制,移位以及仍然需要访问3x3的成本,然后额外的副本可能会更昂贵。

另一方面,由于您使用的是128位类型,因此可以使用字节[16](或字节[9]进行3x3操作)。这样可以更快地访问单个单元格。