单个数字作为xy坐标

时间:2014-06-15 23:49:28

标签: c++ arrays multidimensional-array

我使用非常特定的随机数生成器来生成0到2 ^ 20之间的数字。我试图使用这个数字访问二维数组的元素。

因为myArray [x] [y]可以表示为myArray [x * a + y](其中' a'是第二维中元素的数量),不应该我能够将我的单个随机数转换为二维坐标吗?有问题的数组完全是2 ^ 10乘2 ^ 10,所以我认为它将是:

int random = randomize();      //assigned a random value up to 2^20
int x = floor(random / pow(2, 10));
int y = random % pow(2, 10);
myArray[x][y] = something();   //working with the array

数组元素未按预测方式访问,有些元素根本没有被访问。我怀疑我的逻辑中存在错误,我已经检查了我的程序的语法。

不,我不能使用两个随机数来访问阵列。 不,我不能使用一维数组。

只是检查这将是正确的数学。谢谢。

2 个答案:

答案 0 :(得分:1)

在C ++中^是一个二进制按位XOR运算符,而不是幂运算符。

在C ++中获得2的幂的惯用表达式是1 << n,所以你可以像这样重写你的表达式:

int x = floor(random / (1<<10));
int y = random % (1<<10);

左移n的工作方式就像将{2}加权到n的功能一样,在基数为十的系统中将n 0加到一个数字乘以n - 十分之力。

答案 1 :(得分:0)

2 ^ 10在C ++中不是1024。

因为在c ++中^XOR(按位运算符)c++ operators

include <math.h>       /* pow */

int main ()
{
  int random = randomize();      //assigned a random value up to 2^20
  int x = floor(random / pow(2,10));
  int y = random % pow(2,10);
  myArray[x][y] = something();   //working with the array
  return 0;
}

希望这有帮助。