我使用一个非常特定的随机数生成器来生成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
数组元素没有像预期的那样被访问,有些根本没有被访问。我怀疑我的逻辑有错误,我检查了我的程序语法。
不,我不能使用两个随机数来访问数组。不行,我不能用一维数组
只是检查这将是正确的数学。谢谢你。
在c++中,^
是二进制位XOR
运算符,而不是幂运算符。
c++中获得2的幂的惯用表达式是1 << n
,所以你可以这样重写表达式:
int x = floor(random / (1<<10));
int y = random % (1<<10);
左移n
的原因就像2的n
次方一样,在以10为基数的系统中,将n
的0加到1,乘以n
的10次方。
2^10在c++中不是1024。
因为在c++中^
是XOR
(位运算符)
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;
}