Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从二维位数组中提取位_C#_Arrays_Artificial Intelligence_Bitwise Operators_Bits - Fatal编程技术网

C# 从二维位数组中提取位

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 | +-------+------

对于Minimax算法,我编写了一个代码,我想用逐位运算来加快速度。每个游戏状态保存为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#以防万一)

位运算速度非常快。由于使用位移位手动操作已经没有问题,请复制4x4并将其减少到3x3,然后对其执行操作,并查看是否存在性能问题

如果执行“操作”意味着只读,这取决于直接访问4x4中的位与复制、移位和仍然需要访问3x3的成本,那么额外的复制可能会更加昂贵


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

谢谢您的awnser。在复制字节数组时,它不会变得非常昂贵吗?(在结构中使用它们)这正是我建议看的东西。我的观点是,将一个128位数组提取到另一个128位数组将有成本,读/写位掩码(计算位置等)也会有成本。您还可以创建两个结构(大概UInt128是什么?),一个具有16字节变量Cell1-16(与System.Numerics.Matrix4x4非常相似),另一个具有Cell1-9。由于它们现在是ValueType(与作为引用类型的字节数组相反),因此将像UInt128一样进行复制。