为什么这个模运算操作有效?

时间:2012-02-28 21:30:18

标签: math bit-manipulation

我发现,你可以用这个来模数:

x % m == (x + x / m) & m

但我无法理解为什么会这样......

喜欢8%7 ==(8 + 8/7)& 7,这是

x = 8 =          0001 0000
x / 7 = 1 =      1000 0000
x + x / 7 = 9 =  1001 0000
9 & 7 =          1001 0000 & 1110 0000 = 1000 0000 = 1

1 个答案:

答案 0 :(得分:4)

N = 7k + m, m<7
N/7 = k
N + N/7 = 8k + m
(N + N/7) & 7 = (8k + m) & 7
              = m & 7
              = m

适用于任何2 n -1的数字,而不仅仅是7。