1

可能重复:
为什么需要模运算符?

我需要帮助了解如何&给出模数?我正在分配使用内存访问时间来确定缓存大小。目前,对于 L3 大小,我得到了奇怪的结果。我认为这与&仅适用于 2 的幂或类似的东西有关吗?所以我想了解它实际上是如何工作的

lengthMod = 1024/sizeof(int) - 1;
for (unsigned int k = 0; k < REPS; k++) {
    data[(k * 16) & lengthMod]++;
}

&一直工作吗?还是它只适用于某些值?其他值实际上会发生什么?

4

3 回答 3

2

&是二元“与”运算符。模数的运算符是%

于 2012-10-05T02:02:01.027 回答
1

为了扩展其他答案,如果您取正数的模数和 2 的正幂(即 2a % bb幂和a并且b是正数),您可以有效地将运算符替换为%运算&符(并从中减去 1 b,所以它变成a & (b - 1))。

这是因为&运算符进行了逐位掩码,并且数字模 2 的幂的结果将只是该数字的低位。

这仅在右手参数是 2 的幂并且两个数字都是正数时才有效。否则,使用%运算符。

于 2012-10-05T02:08:43.250 回答
1

&在两个值之间进行按位和运算。对于模数,您需要使用 % 运算符:

int x = 23 % 7; // x = 2
于 2012-10-05T02:03:41.387 回答