C# 从二维位数组中提取位
对于Minimax算法,我编写了一个代码,我想用逐位运算来加快速度。每个游戏状态保存为UInt128,并描述了一个基于4x4平铺的板。每个磁贴可以有一个0到32(独占)的值,因此每个磁贴可以有5位C# 从二维位数组中提取位,c#,arrays,artificial-intelligence,bitwise-operators,bits,C#,Arrays,Artificial Intelligence,Bitwise Operators,Bits,对于Minimax算法,我编写了一个代码,我想用逐位运算来加快速度。每个游戏状态保存为UInt128,并描述了一个基于4x4平铺的板。每个磁贴可以有一个0到32(独占)的值,因此每个磁贴可以有5位 +-------+-------+-------+-------+ | 0-4 | 5-9 | 10-14 | 15-19 | +-------+-------+-------+-------+ | 20-24 | 25-29 | 30-34 | 35-39 | +-------+------
+-------+-------+-------+-------+
| 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#以防万一)位运算速度非常快。由于使用位移位手动操作已经没有问题,请复制4x4并将其减少到3x3,然后对其执行操作,并查看是否存在性能问题 如果执行“操作”意味着只读,这取决于直接访问4x4中的位与复制、移位和仍然需要访问3x3的成本,那么额外的复制可能会更加昂贵
另一方面,由于您使用的是128位类型,因此可以使用字节[16](或用于3x3操作的字节[9])。这将使访问单个单元格的速度更快。谢谢您的awnser。在复制字节数组时,它不会变得非常昂贵吗?(在结构中使用它们)这正是我建议看的东西。我的观点是,将一个128位数组提取到另一个128位数组将有成本,读/写位掩码(计算位置等)也会有成本。您还可以创建两个结构(大概UInt128是什么?),一个具有16字节变量Cell1-16(与System.Numerics.Matrix4x4非常相似),另一个具有Cell1-9。由于它们现在是ValueType(与作为引用类型的字节数组相反),因此将像UInt128一样进行复制。