2012-02-28 108 views
3

我發現,你可以用這個做模:爲什麼這個模位操作起作用?

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 
+0

你的位是向後的。 – 2012-02-28 21:32:00

+1

我不明白,是不是你的例子已經顯示它是如何工作的? – MysticXG 2012-02-28 21:35:09

+1

也許這是BigEndian? – 2012-02-28 21:35:31

回答

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 ň -1號,而不是僅僅7

+0

(8k + m)&7怎麼變成m&7,m&7怎麼變成m? – 2012-02-28 21:50:42

+0

我認爲這是因爲7只是'0111',所以如果你使用任何比特的比特,它就會變爲0 – MysticXG 2012-02-28 21:55:16

+0

@PeterLapisu,@MysticXG,yes,8k以'000'結尾,m (8k + m)&7 = m&7。如果m將完全位於最後三位,則(8k + m)&7 = m&7。由於7是'111',m在最後三位,m&7 = m。 – Beta 2012-02-28 22:01:02