从“&”获得模数

时间:2012-10-05 02:00:04

标签: c++

  

可能重复:
  Why is modulo operator necessary?

我需要帮助了解&如何给出模数?我working on an assignment使用内存访问时间来确定缓存大小。目前我对L3尺寸的结果越来越糟糕。我认为它与&有关,只适用于2的幂,或类似的东西?所以我想了解它是如何运作的

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

&会一直有效吗?或者它只适用于某些值?其他价值实际发生了什么?

3 个答案:

答案 0 :(得分:2)

&是二进制“和”运算符。模数的运算符为%

答案 1 :(得分:1)

&安培;在两个值之间执行bit-wise and操作。对于模数,您需要使用%运算符:

int x = 23 % 7; // x = 2

答案 2 :(得分:1)

要扩展其他答案,如果你取正数的模数和2的正幂(即a % b,其中b是2的幂和ab是肯定的),您可以使用%运算符有效地替换&运算符(并从b中减去1,因此它变为a & (b - 1))。

这是因为&运算符执行了一个按位掩码,并且一个数量为2的幂的结果恰好是该数字的低位。

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