【问题标题】:Getting modulus from `&` [duplicate]从`&`获取模数[重复]
【发布时间】:2012-10-05 02:00:03
【问题描述】:

可能重复:
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]++;
}

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

【问题讨论】:

标签: c++


【解决方案1】:

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

【讨论】:

  • &amp; 如果使用 (2^n -1) 完成,则可以作为模数正常工作。
【解决方案2】:

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

这是因为&amp; 运算符执行按位掩码,数字模 2 的幂的结果将是该数字的低位。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 2021-03-10
      • 2018-04-14
      相关资源
      最近更新 更多