我使用非常特定的随机数生成器来生成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
数组元素未按预测方式访问,有些元素根本没有被访问。我怀疑我的逻辑中存在错误,我已经检查了我的程序的语法。
不,我不能使用两个随机数来访问阵列。 不,我不能使用一维数组。
只是检查这将是正确的数学。谢谢。
答案 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;
}
希望这有帮助。