Почему эта битовая операция по модулю работает? - PullRequest
3 голосов
/ 29 февраля 2012

Я узнал, что вы можете сделать по модулю, используя это:

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 Ответ

4 голосов
/ 29 февраля 2012
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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...