从"&"获取模量

Getting modulus from `&`

本文关键字:获取      更新时间:2023-10-16

可能的重复项:
为什么模运算符是必需的?

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

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

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

&是二进制"and"运算符。模数的运算符是 %

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

这是因为&运算符执行逐位掩码,而数字模 2 的幂的结果只是该数字的低位。

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

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

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