如果可能的话,如何在 C 中定义 2 位数字?

2024-04-14

对于我的大学过程,我正在模拟一个称为随机顺序吸附的过程。 我必须做的一件事是随机地将正方形(不能重叠)放置到格子上,直到没有更多空间为止,重复该过程几次以找到平均“干扰”覆盖率%。

基本上我正在对一个大的整数数组执行操作,其中存在 3 个可能的值:0、1 和 2。标有“0”的站点是空的,标有“1”的站点已满。最初数组的定义如下:

int i, j;
int n = 1000000000;
int array[n][n];

for(j = 0; j < n; j++)
{
    for(i = 0; i < n; i++)
    {
        array[i][j] = 0;
    }
}

假设我想在数组上随机放置 5*5 个正方形(不能重叠),以便这些正方形用“1”表示。这可以通过随机选择 x 和 y 坐标,然后创建一个 5*5 的“1”正方形来完成,该正方形的左上角点从该点开始。然后我会将广场附近的站点标记为“2”。这些代表不可用的站点,因为在这些站点上放置正方形会导致它与现有正方形重叠。这个过程将继续,直到阵列上没有更多的空间来放置方块(基本上,阵列上不再剩下“0”)

无论如何,说到重点。我想通过使用按位运算使这个过程尽可能高效。如果我不必标记广场附近的站点,这会很容易。我想知道是否可以创建一个 2 位数字,以便我可以解释标有“2”的站点。

抱歉,如果这听起来真的很复杂,我只是想解释一下为什么我想这样做。


您无法创建 2 位大小的数据类型,因为它无法寻址。您可以做的是将几个 2 位数字打包到一个更大的单元格中:

   struct Cell {
      a : 2;
      b : 2;
      c : 2;
      d : 2;
   };

这规定了每个成员a, b, c and d应该占用内存中的两位。

EDIT:这只是如何创建 2 位变量的示例,对于所讨论的实际问题,最有效的实现可能是创建一个数组int并把一些摆弄包裹在几个set/get方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果可能的话,如何在 C 中定义 2 位数字? 的相关文章

随机推荐