2012-02-28 18 views
3

私はあなたが使用してこれを法を行うことができますことを、分かった:このモジュロビット演算はなぜ機能しますか?

のような%8のために... 7 ==を

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

をしかし、なぜその作業私は理解できない(8 + 8月7日)& 7、これは、任意の2 Nのために働く

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

あなたのビットは後方にあります。 –

+1

私は理解していません、あなたの例はすでにそれがどのように動作しているかを示していませんか? – MysticXG

+1

おそらくSOはBigEndianですか? –

答えて

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

-1の数だけではなく、7

+0

(8k + m)&7はどのようにm&7になりましたか?そしてm&7はどのようにmになりましたか? –

+0

7はちょうど '0111'だからだと思うので、それよりもビットが大きい場合は' 0 'になります。 – MysticXG

+0

@PeterLapisu、@MysticXG、yes、8kは '000'で終わり、m <8なので、mは最後の3ビットで完全になるので、(8k + m)&7 = m&7です。そして7が「111」であり、mが最後の3ビットにあるので、m&7 = mである。 – Beta

関連する問題