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,c和d应该占据存储器两个比特.
编辑:这只是如何创建2位变量的一个例子,对于实际问题,最有效的实现可能是创建一个数组int并包装在几个set/ get方法中的位.
| 归档时间: |
|
| 查看次数: |
7129 次 |
| 最近记录: |