我需要帮助了解&
如何给出模数?我working on an assignment使用内存访问时间来确定缓存大小。目前我对L3尺寸的结果越来越糟糕。我认为它与&
有关,只适用于2的幂,或类似的东西?所以我想了解它是如何运作的
lengthMod = 1024/sizeof(int) - 1;
for (unsigned int k = 0; k < REPS; k++) {
data[(k * 16) & lengthMod]++;
}
&
会一直有效吗?或者它只适用于某些值?其他价值实际发生了什么?
答案 0 :(得分:2)
&
是二进制“和”运算符。模数的运算符为%
。
答案 1 :(得分:1)
&安培;在两个值之间执行bit-wise and操作。对于模数,您需要使用%运算符:
int x = 23 % 7; // x = 2
答案 2 :(得分:1)
要扩展其他答案,如果你取正数的模数和2的正幂(即a % b
,其中b
是2的幂和a
和b
是肯定的),您可以使用%
运算符有效地替换&
运算符(并从b中减去1,因此它变为a & (b - 1)
)。
这是因为&
运算符执行了一个按位掩码,并且一个数量为2的幂的结果恰好是该数字的低位。
这仅在右手参数为2的幂并且两个数均为正时才有效。否则,请使用%
运算符。