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

Edd*_*ddy 3 c integer bit-manipulation bitwise-operators

对于我的大学过程,我正在模拟一个称为随机顺序吸附的过程.我要做的事情之一就是将正方形(不能重叠)随机存放到格子上,直到没有剩余空间为止,重复几次以找到平均"干扰"覆盖率%.

基本上我正在对大量整数执行操作,其中存在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

假设我想在阵列上随机存放5*5个正方形(不能重叠),因此正方形由'1'表示.这可以通过随机选择x和y坐标然后创建一个5*5平方的'1'来实现,该点的正方形点从该点开始.然后我会将广场附近的地点标记为'2'.这些代表不可用的站点,因为在这些站点上放置一个正方形将导致它与现有正方形重叠.这个过程将继续,直到没有剩余空间在阵列上存放方块(基本上,阵列上不再有'0')

无论如何,到了这一点.我想通过使用按位运算使这个过程尽可能高效.如果我不必在广场附近标记网站,这将很容易.我想知道是否可以创建一个2位数字,以便我可以考虑标有"2"的网站.

对不起,如果这听起来很复杂,我只想解释为什么我要这样做.

And*_*nck 10

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

   struct Cell {
      a : 2;
      b : 2;
      c : 2;
      d : 2;
   };
Run Code Online (Sandbox Code Playgroud)

这指定各部件的a,b,cd应该占据存储器两个比特.

编辑:这只是如何创建2位变量的一个例子,对于实际问题,最有效的实现可能是创建一个数组int并包装在几个set/ get方法中的位.